gpt4 book ai didi

php - 在构建时将 $HOSTNAME 传递给 Docker 容器

转载 作者:可可西里 更新时间:2023-11-01 10:02:28 25 4
gpt4 key购买 nike

我看过一些关于此的帖子,但它们没有回答“如何在构建时将主机的主机名传递给容器?”的问题。

我需要在构建时(在 docker 文件中)而不是在创建时传递主机名的原因是因为我使用的是 docker swarm,如果我在创建服务时传递主机名,那么我只会得到一个每个容器的主机名:

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

通过在运行时传递主机名,无论容器实际运行在哪个主机上,每个容器看起来都好像在管理器节点上运行。

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

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

我需要将什么添加到我的 docker 文件中?

Docker 文件:

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

索引.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将是我分配主机名的变量和 HOSTNAME是容器id。

最佳答案

在构建过程中使用主机名没有意义,因为基本思想是在中央服务器中构建,然后推送,然后从需要作为容器运行图像的每个实例中提取。

所以我推荐 --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>

关于php - 在构建时将 $HOSTNAME 传递给 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45443510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com