如何将docker env变量读入Java代码

如何将docker env变量读入Java代码,java,rabbitmq,dockerfile,Java,Rabbitmq,Dockerfile,我正在尝试对接我的Java应用程序,该应用程序试图连接到Rabbitmq服务器。我已经通过docker env变量传递了Rabbitmq Url,并使用 System.getenv(“RABBITMQ_URL”) ,但结果是空的。我读取docker env变量的方式是否有问题?这是我的Docker创建命令: docker服务创建--名称xxx--环境 RABBITMQ_URL=amqp://rabbitmq:xxxx --网络msgq--具有注册表身份验证 ${imageName} 对我来说似乎

我正在尝试对接我的Java应用程序,该应用程序试图连接到Rabbitmq服务器。我已经通过docker env变量传递了Rabbitmq Url,并使用

System.getenv(“RABBITMQ_URL”)

,但结果是空的。我读取docker env变量的方式是否有问题?这是我的Docker创建命令:

docker服务创建--名称xxx--环境 RABBITMQ_URL=amqp://rabbitmq:xxxx --网络msgq--具有注册表身份验证 ${imageName}


对我来说似乎很好。请参阅下文:

>> 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
>>

这很奇怪,但是重新启动码头集装箱对我来说很好。事实证明,每当我使用“-network”更新网络连接时,都必须重新启动容器。谢谢

您可以使用docker inspect检查您的图像,与您的服务一样:docker service inspect检查变量的空白位置。不,这不是预期的。您可以将网络连接到现有服务,即使该服务已创建。