docker - 如何从另一个容器连接到服务?
问题描述
嗨,我有 2 个带有docker-compose
-A
和B
. 项目B
有它自己的 Redis,我想从项目连接到这个B
的 Redis 。A
我该怎么做呢?
解决方案
您可以使用预先存在的网络:
如果您希望容器加入预先存在的网络,请使用 external 选项
示例文件夹结构:
shubuntu1@shubuntu1:~/cc$ ls
prj1 prj2
shubuntu1@shubuntu1:~/cc$ tree
.
├── prj1
│ └── docker-compose.yaml
└── prj2
└── docker-compose.yaml
2 directories, 2 files
prj1/docker-compose.yaml:
version: '3.4'
services:
service_1:
image: alpine
tty: true
prj2/docker-compose.yaml:
version: '3.4'
services:
service_2:
image: alpine
tty: true
networks:
default:
external:
name: prj1_default
检查容器是否可以互相访问:
shubuntu1@shubuntu1:~/cc/prj2$ docker exec -it prj2_service_2_1 ping service_1
PING service_1 (192.168.192.2): 56 data bytes
64 bytes from 192.168.192.2: seq=0 ttl=64 time=0.050 ms
64 bytes from 192.168.192.2: seq=1 ttl=64 time=0.148 ms
64 bytes from 192.168.192.2: seq=2 ttl=64 time=0.161 ms
你可以看到第一个 docker-compose.yaml,它会为这个 compose 生成一个网络,这里是prj1_default
,它取决于找到第一个 docker-compose.yaml 的文件夹名称(prj1)。
然后,在第二个 docker-compose.yaml 中,使用第一个网络作为默认网络。这样,两个不同的 docker-compose.yaml 生成的容器就可以在同一个网络中,从而可以互相访问。然后,对于您的情况,prjB 能够访问 prjA 的 redis。
推荐阅读
- java - 如何将多个 String-Arraylist 存储到 int 变量中?
- python - Pandas DataFrame.hist() 不起作用
- ios - 将文件写入 iCloud 驱动器错误域 = NSCocoaErrorDomain 代码 = 256
- c# - 如何处理部分文件,使其不会被 SFTP 调度提取脚本提取?
- apache-kafka - 如何在 apache kafka 主题中获取最后一个事件状态
- angular - 如何在 ngif 中使用本地存储值
- php - 致命错误:在布尔值上调用成员函数 row_array()
- clojurescript - 使用 Antizer 而不是 AntDesign,我们如何访问 Card.Meta 之类的东西?
- linux - 如何在 Linux 中获取分组文件的总数以及扩展名和路径
- mysql - 在 MySQL 中使用 `database_name`.`viewname`.* 语法进行选择会引发“未知表 'database_name.viewname'”