在 Docker Compose 中设置主机名
source link: https://www.iplayio.cn/post/9963027
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本分分享如何通过 Docker Compose 为您的容器设置主机名。
想知道如何在 Docker Compose 中设置主机名?我会告诉你的。
您可以在服务下定义它,如下所示:
...
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
hostname: ledocker
...
主机名的一般目标是网络上的计算机相互认识,从而在它们之间进行通信。
同样,这里的主要目标是确保容器可以在 Docker 网络内成功地相互通信。
我将讨论如何使这成为可能的两种方法:
方法一:非显式通信
在 Docker 网络中,Docker Compose文件中定义的服务名称可用于测试容器是否可以相互通信。
以下面的反向代理配置为例:
version: '3.7'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html
- ./dhparam:/etc/nginx/dhparam
- ./vhost:/etc/nginx/vhost.d
- ./certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
restart: always
networks:
- net
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
env_file:
- ./letsencrypt.env
depends_on:
- nginx-proxy
volumes:
- ./certs:/etc/nginx/certs:rw
- ./vhost:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: always
networks:
- net
networks:
net:
external: true
请注意,这两个服务名称是nginx-proxy
和letsencrypt
。您可以使用这些名称来测试容器是否可以相互通信。这在故障排除情况下会变得非常有用。
首先,在Nginx 反向代理容器内安装 ping :
avimanyu@iborg-desktop:~/nginx-proxy$ docker-compose exec nginx-proxy bash -c "apt update && apt install -y iputils-ping"
现在,您可以在此容器内使用 ping 命令来检查它是否可以与Let's Encrypt Container(用于 SSL)通信。
avimanyu@iborg-desktop:~/nginx-proxy$ sudo docker-compose exec nginx-proxy ping letsencrypt
PING letsencrypt (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
^C
--- letsencrypt ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 37ms
正如您在上面看到的,反向代理容器“看到”了第二个发送响应的 SSL 容器!在 中nginx-proxy_letsencrypt_1.net
,nginx-proxy_letsencrypt_1
是 SSL 容器名称,net
是我们的自定义网络。
让我们快速验证一下:
avimanyu@iborg-desktop:~/nginx-proxy$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9ef56e22f58 jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 7 minutes ago Up 7 minutes nginx-proxy_letsencrypt_1
563133f5d039 jwilder/nginx-proxy "/app/docker-entrypo…" 7 minutes ago Up 7 minutes nginx-proxy_nginx-proxy_1
要验证网络,您可以使用该docker network ls
命令。
avimanyu@iborg-desktop:~/nginx-proxy$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
018c50dc4fdc bridge bridge local
27fd2370e735 net bridge local
38ce8d11227b host host local
2440210d0fc5 none null local
方法二:显式通信
假设,出于某种原因,您想为容器显式指定主机名。Docker Compose 也可以让您做到这一点!
使用hostname
配置选项,您可以为 Docker Compose 文件中定义的任何服务设置不同的主机名,就像我为下面的 Let's Encrypt服务所做的那样:
version: '3.7'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html
- ./dhparam:/etc/nginx/dhparam
- ./vhost:/etc/nginx/vhost.d
- ./certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
restart: always
networks:
- net
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
hostname: ledocker
env_file:
- ./letsencrypt.env
depends_on:
- nginx-proxy
volumes:
- ./certs:/etc/nginx/certs:rw
- ./vhost:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: always
networks:
- net
networks:
net:
external: true
在这里,请注意,我已hostname: ledocker
在 Let's Encrypt 服务定义中明确添加。我想ledocker
用作 SSL 容器的主机名。
但是等等,我们可以使用 ping 命令再次检查吗?
avimanyu@iborg-desktop:~/nextcloud$ sudo docker-compose exec nginx-proxy ping ledocker
PING ledocker (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=4 ttl=64 time=0.093 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=5 ttl=64 time=0.078 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=6 ttl=64 time=0.075 ms
^C
--- ledocker ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 129ms
rtt min/avg/max/mdev = 0.034/0.070/0.093/0.018 ms
完全有用!
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK