在构build时将$ HOSTNAME传递给Docker容器

我已经看到一些关于这个的post,但是他们没有回答“如何在构build时将一个主机的主机名传递给一个容器?

我需要在构build时(在docker文件中)而不是在创build时传递主机名的原因是因为我正在使用docker swarm,并且如果在创build服务时传递主机名,所以我只会为每个容器:

$ docker service create -p <port>:<port> --hostname $HOSTNAME --replicas 4 <image>

通过在运行时传递主机名,无论容器实际运行的是什么主机,都将看起来好像它正在pipe理器节点上运行。

如何在docker文件中的docker构build过程中传递主机名值?

我需要能够查看容器中的主机名的原因是因为每次访问一个容器,我想访问一个mongo数据库,并增加容器和节点的查看计数,以显示负载平衡function一群。

我需要添加到我的泊坞窗文件?

Dockerfile:

 FROM resin/raspberry-pi-alpine-node MAINTAINER brennansaul jamessaul7629@gmail.com RUN apk --update add nginx php5-fpm && \ mkdir -p /run/nginx ADD www /www ADD nginx.conf /etc/nginx/ ADD php-fpm.conf /etc/php5/php-fpm.conf ADD run.sh /run.sh ENV LISTEN_PORT=80 EXPOSE 80 CMD /run.sh 

的index.php

 <html> <h1><?php echo "Hello ".($_ENV["NAME"]?$_ENV["NAME"]:"world")."!"; ?></h1> <?php if($_ENV["HOSTNAME"]) {?><h3>My hostname is <?php echo $_ENV["HOSTNAME"]; ?></h3><?php } ?> <?php if($_ENV["HOST_NAME"]) {?><h3>My hostname is <?php echo $_ENV["HOST_NAME"]; ?></h3><?php } ?> </html> 

HOST_NAME是我分配主机名的variables,而HOSTNAME是容器ID。

在构build过程中使用主机名是没有意义的,因为基本的想法是在中央服务器中构build,然后按下,然后从需要运行映像的每个实例中拉出作为容器。

所以我build议 – --mount主机名文件:

 docker service create \ -p <port>:<port> \ --replicas 4 --mount type=bind,source=/etc/hostname,destination=/tmp/host-hostname,readonly=true \ <image> 

使用这个PHP:

  <h3>My hostname is <?php echo file_get_contents("/tmp/host-hostname"); ?></h3> 

在这种情况下,您不必通过Docker传递服务器主机名,您可以使用$_SERVER['HTTP_HOST']gethostname()或其他常用技术来获取容器标识。