Docker容器主机名

时间:2017-07-12 07:01:16

标签: java docker dockerfile hostname swarm

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

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

我希望在jvm中看到这个新的主机名。

我得到的只是标准的docker主机名:

/ # env
HOSTNAME=04dbf311a3be

当我在容器启动后使用上面的导出手动设置主机名时,一切正常。使用compose stackfile在swarm中运行所有内容。

EDIT1: 我在容器构建期间但在启动期间没有这样做

EDIT2: 要清楚,我有什么:

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没有被更改

1 个答案:

答案 0 :(得分:0)

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

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

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

或者,如果要更动态地创建容器名称,则应在docker compose文件中命名它们。即使您不使用container_name选项,docker-compose也会附加-1

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

我不知道swarm,但是当它与yaml文件一起使用时,你应该得到类似的命名选项。