网站首页 > 博客文章 正文
在这个 Docker 快速技巧中,您将学习如何通过 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
from wljslmz
方法二:显式通信
假设,出于某种原因,您想为容器显式指定主机名。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
from wljslmz
^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
猜你喜欢
- 2024-09-17 树莓派5安装docker、docker compose、gitlab-ce及配置
- 2024-09-17 11-docker系列-docker之compose安装和相关命令
- 2024-09-17 Docker-compose解析(docker-compose详解)
- 2024-09-17 docker-compose安装(docker-compose安装nginx)
- 2024-09-17 docker系列:docker-compose用法详解
- 2024-09-17 Docker Compose搭建MySQL主从复制集群
- 2024-09-17 这个开源项目为编写各种Docker-Compose提供了样本
- 2024-09-17 一文掌握 Docker Compose 命令(docker—compose)
- 2024-09-17 通过Docker开源项目Compose实现对 Docker 容器集群的快速编排
- 2024-09-17 docker-compose常用命令说明(docker-compose init)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)