如何将 Docker 环境变量读取到 Java 代码中

7
我正在尝试将我的Java应用程序dockerize,并尝试连接到Rabbitmq服务器。我已经通过docker env变量传递了Rabbitmq Url,并使用System.getenv("RABBITMQ_URL")读取了相同的url,但它返回null。我读取docker env变量的方式有问题吗?这是我的Docker创建命令:
docker service create --name xxx --env RABBITMQ_URL=amqp://rabbitmq:xxxx --network msgq --with-registry-auth ${imageName}

你可以使用 docker inspect 命令检查你的镜像,同样地,使用 docker service inspect 命令检查变量被清空的位置。 - Mario Santini
2个回答

2

这很奇怪,但是我重新启动了Docker容器,一切都正常工作了。原来,每当我使用“--network”更新网络连接时,我都必须重新启动容器。谢谢。


不,这是意料之外的。即使服务已经创建,您仍然可以连接网络到现有服务。 - Anoop

1

对我来说似乎完全正常。请参见下文:

>> cat Dockerfile
FROM java

COPY Test.java /Test.java
RUN javac Test.java
CMD java Test


>> cat Test.java
class Test {
  public static void main(String[] j) {
    System.out.println(System.getenv("RABBITMQ_URL"));
    while (true) {}
  }
}


>> docker build -t testj .
Sending build context to Docker daemon  6.656kB
Step 1/4 : FROM java
 ---> d23bdf5b1b1b
Step 2/4 : COPY Test.java /Test.java
 ---> Using cache
 ---> 2333685c6488
Step 3/4 : RUN javac Test.java
 ---> Using cache
 ---> 8d1e98d604b9
Step 4/4 : CMD java Test
 ---> Using cache
 ---> 6f9625f04966
Successfully built 6f9625f04966
Successfully tagged testj:latest


>> docker service create --name xxx --env RABBITMQ_URL=amqp://rabbitmq:xxxx --detach testj
937rbfctrds0z1mhpk1e7dlja

>> docker service logs xxx                                                                                                                                                      
xxx.1.acv6mqqy38pf@moby    | amqp://rabbitmq:xxxx
>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接