我可以在Dockerfile中获取主机主机名吗

我可以在Dockerfile中获取主机主机名吗,docker,dockerfile,Docker,Dockerfile,我需要主机名才能运行entrypoint脚本,该脚本会相应地运行(生产、预生产)。如何获取主机名并在Dockerfile中将其设置为ARG。docker-compose.yml使用此docker文件 docker-compose.yml: ... nginx: restart: always build: ./nginx ports: - "80:80" - "443:443" volumes_from: - web d

我需要主机名才能运行entrypoint脚本,该脚本会相应地运行(生产、预生产)。如何获取主机名并在Dockerfile中将其设置为ARG。docker-compose.yml使用此docker文件

docker-compose.yml:

...
nginx:
    restart: always
    build: ./nginx
    ports:
      - "80:80"
      - "443:443"
    volumes_from:
      - web
    depends_on:
      - web
    container_name: 'nginx'
...
Dockerfile位于/nginx文件夹内:

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\u HOSTNAME}。另外,我希望这段代码能够在每台机器上运行,而无需更改任何内容,只需向docker entrypoint添加新的主机名。sh

您应该通过环境变量传递主机名。然后我删除了所有图像,重新生成了,并且在docker-entrypoint.sh中无法访问该变量。我是否必须在docker compose级别添加此变量主机名?(我还在Docker文件中更改了此行ARG HOST_HOSTNAME=$HOST_HOSTNAME)是的,您需要在
Docker compose.yml
级别添加它。由于该值特定于正在运行它的主机,因此您不希望将其构建到映像中。