如何防止Docker将新主机名分配给新容器?

时间:2019-06-27 13:54:21

标签: docker docker-compose dockerfile docker-swarm docker-machine

我有一个Dockerfile,它将执行PS脚本来更改容器的主机名。但是,当我使用“ docker run”从该映像启动新容器时,容器的主机名将更改回容器ID。该脚本可在容器内运行。我希望主机名固定为脚本在构建阶段已更改的内容。

我尝试从容器内执行脚本,脚本工作正常。容器主机名已更改,没有任何错误。但是从该映像运行容器会覆盖主机名。

FROM microsoft/mssql-server-windows-developer
COPY Test.ps1 .
RUN .\Test.ps1

我希望容器主机名在构建阶段保持不变。当前输出是Docker将主机名更改回容器ID。

3 个答案:

答案 0 :(得分:1)

Docker容器的许多属性仅在运行时设置。最突出的包括发布的端口和卷挂载,但是还有其他一些仅在docker run时间设置的详细信息。与此相关的是,您在Dockerfile中所做的任何操作都不会影响正在运行的容器的主机名:它始终由docker run --hostname选项设置,或者如果没有,则将其设置为十六进制容器ID。

(在这个空间中,Docker映像也永远不会进行任何网络设置或运行后台进程。)

在大多数情况下,您实际上并不关心容器认为自己的主机名是什么。设置主机名不会影响其他容器访问该容器或该容器外部的其他内容的方式,并且大多数程序都无需检查自己的主机名。 (如果您docker run --hostname=stackoverflow.com会发生什么?)

如果必须设置主机名,则必须在容器启动时使用docker run --hostname选项或Docker Compose hostname:选项(或针对不同协调器的类似选项)进行设置。

答案 1 :(得分:0)

您应该尝试将--name=meaningful_name添加到docker run命令中。

另外,请阅读that

答案 2 :(得分:0)

添加docker-file容器名称值

  db:
       image: mysql:5.7
       container_name: mycontainername
       hostname: myhostname
       networks:
           default:
                aliases:
                   myalias