我使用GitLab提供的默认模板创建了一个项目。它附带了一个预定义的Dockerfile,我想在该文件上添加一些额外的环境变量,以便在application.properties
中使用。
到目前为止,我所做的是在DockerFile中添加my_prop
ENV值,如下所示:
FROM maven:3-jdk-8-alpine
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN mvn package
ENV PORT 5000
ENV MY_PROP testpropertyfromdocker
EXPOSE $PORT
CMD [ "sh", "-c", "mvn -Dserver.port=${PORT} spring-boot:run" ]
像这样设置我的application.properties
:
test.prop=${MY_PROP}
@SpringBootApplication
@RestController
public class DemoApplication {
@Value("${test.prop}")
private String testProp;
@GetMapping("/")
String home() {
return "My prop from docker: " + testProp;
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
docker build -t demo .
java.lang.IllegalArgumentException: Could not resolve placeholder 'MY_PROP' in value "${MY_PROP}"
如何将环境变量传递给Spring应用程序?在IDE内部调试时是否可以使用.env
文件或类似文件,或者必须生成映像才能运行项目?
PS:我不认为这是在部署到Docker时外部化Spring Boot属性的重复,或者至少答案应该更完整,因为我没有设法使我的配置按预期工作。
编辑我更新了我的pom.xml
以包括以下内容:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.2.RELEASE</version>
<configuration>
<environmentVariables>
<MY_PROP>testfromappprops</MY_PROP>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENV MY_PROP testpropertyfromdocker
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Error: Invalid or corrupt jarfile /app.jar
多谢了。
我认为应用程序的application.properties必须是完整的,因为日志显示应用程序不能读取docker文件。
正确定义了application.properties后,您就可以运行:
$ docker run -e "SPRING_PROFILES_ACTIVE=prod" -p 8080:8080 -t springio/gs-spring-boot-docker
这里有一个有用的指南
问题内容: 我正在尝试设置一个postgres容器,并希望使用以下命令设置postgres登录名: 所以我像这样创建了docker-compose.yml 我还尝试了将环境变量声明为db部分的其他语法: 但是这些选项似乎都不起作用,因为无论出于什么原因,无论何时我尝试使用各种连接字符串连接到postgres数据库: 与抱怨没有用户数据库相反,它们都给我身份验证失败。 问题答案: 您收到的身份验证错
问题内容: 从 尚未在Dockerfile中声明的Docker 容器获取环境变量的最简单方法 是什么 ? 例如,通过某个会话设置的环境变量? 我可以做到,但是我更喜欢只返回值的东西。 我尝试使用,但是替换似乎发生在容器外部,因此我没有从容器中获取env var,而是从我自己的计算机中获取了env var。 谢谢。 问题答案: 在容器中运行以使变量替换发生在容器中的正确方法是:
到目前为止,我一直在中设置以下环境变量: 这设置了我的活动spring配置文件。但是现在,我希望将本地概要文件添加到中定义的其他概要文件中,而不是替换它们。
我在使用dotnet core 3.1和visual Studio生成的DockerFile时遇到了一些问题。 我试图通过Dockerfile将密码放入docker的环境变量中,但当我使用读取varibale时,该变量为NULL。 提前致谢
这个码头商。yml: 使用这个。env文件(它位于根文件夹中,如docker-compose.yml和Dockerfile): 和节点服务器启动中的以下代码: 我真的更喜欢使用第一种或第二种方法 docker版本:18.06.1-CE docker-compose版本:1.19.0
我试图在我的Svelte应用程序中为APIendpoint使用docker compose环境变量,但它没有定义。 rollup.config 苗条