在构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()
或其他常用技术来获取容器标识。