【问题标题】:How to prevent docker from assigning new hostname to new containers?如何防止 docker 将新主机名分配给新容器?
【发布时间】:2019-06-27 13:54:21
【问题描述】:

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

我已尝试从容器内执行脚本并且脚本运行良好。容器主机名被更改而没有任何错误。但是从该映像运行容器会覆盖主机名。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    如果您必须设置主机名,则必须在容器启动时设置它,使用 docker run --hostname 选项或 Docker Compose hostname: 选项(或用于不同编排器的类似选项)。

    【讨论】:

    • 要求是我需要安装一个特定的工具,该工具与该特定主机名有许可证绑定。因此,我正在考虑使用 RUN 命令更改主机名并将该工具安装在同一层上。你有更好的解决方案吗?理想的解决方案是在映像构建阶段本身修复容器操作系统的主机名。
    【解决方案2】:

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

    另外,请阅读that

    【讨论】:

    • --name 参数设置容器名称,而不是容器本身的主机名。另外,我正在寻找一种在 docker 映像构建阶段本身修复主机名的方法。
    【解决方案3】:

    添加docker-file container_name 值

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

    【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2022-09-23
    • 2020-11-06
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2022-07-21
    相关资源
    最近更新 更多