Docker容器主机名

我想在启动期间设置docker容器主机名(HOSTNAME env var),这是在dockerfile的ENTRYPOINT中指定的.sh脚本:

#!/bin/sh export HOSTNAME=something-$(hostname) java $JAVA_OPTS -jar /app.jar 

我想要为jvm看到这个新的主机名。

我所得到的就是标准的docker主机名称:

 / # env HOSTNAME=04dbf311a3be 

当我设置主机名手动使用上面的导出上面的容器启动后,一切正常。 一切正在使用组合堆栈文件在群集中运行。

编辑1:我没有这样做在容器build立,但在启动过程中

编辑2:要清楚,我有什么:

DOCKER SWARM:

 CONTAINER1 HOSTNAME=391fa2c7e184 CONTAINER2 HOSTNAME=39123a43242asd4 CONTAINER3 HOSTNAME=123123123123 

我想要的是:

 CONTAINER1 HOSTNAME=APPNAME-391fa2c7e184 CONTAINER2 HOSTNAME=APPNAME-123fa2c7e184 CONTAINER3 HOSTNAME=APPNAME-343fa345e184 

并希望这在n-containers的启动过程中被自动设置

我如何尝试做到这一点:

我尝试在容器启动时调用start.sh文件(在dockerfile中指向ENTRYPOINT命令)中设置此项:

 #!/bin/sh export HOSTNAME=something-$(hostname) java $JAVA_OPTS -jar /app.jar 

没有效果,HOSTNAME没有被改变

我不认为入口点脚本是命名容器的正确位置,因为它已经在那个时候创build​​了。 你有几个可能性。 像这样在运行时命名它。

 ~ $ docker run -it -h myContainer 3bee3060bfc8 /bin/bash [root@myContainer /]# echo $HOSTNAME myContainer [root@myContainer /]# 

-h选项让你为你的容器命名,当你运行它。 该值应该在您的ENTRYPOINT脚本中有效。

或者,如果要更dynamic地创build容器名称,则应将其命名为泊坞窗撰写文件。 即使你不使用container_name选项,docker-compose也会追加-1

 version: '2' services: myService: container_name: myService-$(envVariable) 

我不知道swarm,但是因为它与yaml文件一起工作,您应该得到类似的命名选项。