当前位置: 首页 > 知识库问答 >
问题:

Spring从docker添加环境变量

杭涵映
2023-03-14

我使用GitLab提供的默认模板创建了一个项目。它附带了一个预定义的Dockerfile,我想在该文件上添加一些额外的环境变量,以便在application.properties中使用。

到目前为止,我所做的是在DockerFile中添加my_propENV值,如下所示:

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

多谢了。

共有1个答案

曾骁
2023-03-14

我认为应用程序的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 苗条