docker - 如何将一个 docker 服务与其他 docker 服务链接?
问题描述
我有 12 个码头集装箱。当我单独运行时,我可以使用 --link 来连接其中的一些,例如带有 mysql db 的 web 应用程序链接。但是当我在 docker swarm 中将它们作为服务运行(如 docker create service)时,我无法链接它们,因为 --link 不适用于 docker service create 命令。如果我使用 docker-compose.yml 文件来运行所有容器,我可以链接起来。但这是另一个问题。假设我在 docker-compose 文件或 docker stack 中有 12 个不同的容器(组件),我该如何更新单个容器或组件?我是否必须重新部署整个 docker 堆栈?
解决方案
您只需要将容器放在每个 docker-compose.yml 文件中的同一网络中。
首先,您需要使用 docker 创建一个网络:
docker network create -d bridge custom
在您需要将 docker-compose 文件中的网络更改为新网络之后,如果您愿意,可以使用 external_links ,例如:
示例文件 1:
version: '3'
services:
php-server:
container_name: myphp
image: devilxatoms/taproject:latest
ports:
- "9000:9000"
external_links:
- mysql:mysql
networks:
- custom
networks:
custom:
external: true
示例文件 2:
version: '3'
services:
mysql:
container_name: mydb
image: mysql:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
networks:
- custom
networks:
custom:
external: true
为了测试它,我只访问了我的 mysql 容器的 bash 并向另一个容器发送 ping:
MySQL 容器:
# ping php-server
PING php-server (172.26.0.3) 56(84) bytes of data.
64 bytes from myphp.custom (172.26.0.3): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=2 ttl=64 time=0.368 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=3 ttl=64 time=0.071 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=4 ttl=64 time=0.136 ms
^C
--- php-server ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3094ms
rtt min/avg/max/mdev = 0.071/0.174/0.368/0.115 ms
PHP 容器:
# ping mysql
PING mysql (172.26.0.2) 56(84) bytes of data.
64 bytes from mydb.custom (172.26.0.2): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from mydb.custom (172.26.0.2): icmp_seq=2 ttl=64 time=0.107 ms
64 bytes from mydb.custom (172.26.0.2): icmp_seq=3 ttl=64 time=0.109 ms
^C
--- mysql ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2094ms
rtt min/avg/max/mdev = 0.075/0.097/0.109/0.015 ms
要更新特定服务,您可以使用您的更改更新您的 docker-compose 文件,并告诉 docker-compose 您需要使用以下行更新哪些服务:
docker-compose up -d --no-deps <service_name>
-d是分离模式:在后台运行容器,打印新的容器名称。
--no-deps不会启动链接服务。
参考: https ://docs.docker.com/compose/compose-file/#external_links
推荐阅读
- python - 如果列和行值为空或空白 srping,则使用来自不同特定列的值填充
- reactjs - 如何使用 useQuery 和 subscribeToMore 取消订阅
- python - 将 Python 项目移动到另一台机器上?
- r - R时间间隔:当样本超过小时标记时按一天中的小时分组
- opendaylight - Opendaylight Sodium-SR2 安装问题
- hadoop - 如何在具有子文件夹和多个 csv 文件的 HDFS 文件夹上创建表
- javascript - 尝试使用 mongodb 创建登录
- google-cloud-platform - 通过 Cloud Run 下载大文件时出现 500 内部服务器错误
- python - 通过字典解析并更新数据框中的空白
- java - Jar 启动器极其缓慢