【问题标题】:Can I get host hostname inside Dockerfile我可以在 Dockerfile 中获取主机主机名吗
【发布时间】:2019-02-19 13:37:11
【问题描述】:

我需要拥有主机的主机名才能运行相应运行的入口点脚本(生产、预生产)。如何获取hostname 并将其设置为 Dockerfile 中的 ARG。此 docker 文件由 docker-compose.yml 使用。

docker-compose.yml:

...
nginx:
    restart: always
    build: ./nginx
    ports:
      - "80:80"
      - "443:443"
    volumes_from:
      - web
    depends_on:
      - web
    container_name: 'nginx'
...

./nginx 文件夹内的 Dockerfile:

FROM nginx:latest
ARG HOST_HOSTNAME=hostname
ENV HOST_HOSTNAME=$HOST_HOSTNAME
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
...

并且在 docker-entrypoint.sh 中可以使用 ${HOST_HOSTNAME}。另外我希望这段代码能够在每台机器上运行而无需更改任何内容,只需将新主机名添加到 docker-entrypoint.sh

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    你应该通过环境变量传递主机名

    【讨论】:

    • 我设置了环境变量 HOST_HOSTNAME,然后我重新启动并检查了它是否可用。然后我删除了所有图像,进行了重建,并且在 docker-entrypoint.sh 中无法访问该变量。我必须在 docker-compose 级别添加这个变量 HOST_HOSTNAME 吗? (另外我在 Docker 文件中更改了这一行 ARG HOST_HOSTNAME=$HOST_HOSTNAME)
    • 是的,您需要在docker-compose.yml 级别添加它。由于该值特定于您运行它的主机,因此您不希望将其构建到映像中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多