我想要连接到mongodb容器的几个app容器。我尝试使用external_links,但我无法连接到mongodb。
我得到了
MongoError:首先无法连接到服务器[mongodb:27017] 连接
我是否必须将容器添加到同一网络中才能使external_links正常工作?
MongoDB的:
version: '2'
services:
mongodb:
image: mongo:3.4
restart: always
ports:
- "27017:27017"
volumes:
- data:/data/db
volumes:
data:
应用
version: '2'
services:
app-dev:
restart: Always
build: repository/
ports:
- "3000:80"
env_file:
- ./environment.env
external_links:
- mongodb_mongodb_1:mongodb
网络:
# sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
29f8bae3e136 bridge bridge local
67d5519cb2e6 dev_default bridge local
9e7097c844cf host host local
481ee4301f7c mongodb_default bridge local
4275508449f6 none null local
873a46298cd9 prod_default bridge local
答案 0 :(得分:11)
https://docs.docker.com/compose/compose-file/#/externallinks上的文档说
If you’re using the version 2 file format, the externally-created containers must be connected to at least one of the same networks as the service which is linking to them.
例如:
创建新的泊坞网络
docker network create -d bridge custom
搬运工-撰写-1.yml
version: '2'
services:
postgres:
image: postgres:latest
ports:
- 5432:5432
networks:
- custom
networks:
custom:
external: true
搬运工-撰写-2.yml
version: '2'
services:
app:
image: training/webapp
networks:
- custom
external_links:
- postgres:postgres
networks:
custom:
external: true
答案 1 :(得分:3)
Yuva上面对版本2的回答也适用于版本3。
external_links的文档不够清晰。
为了更加清晰,我将版本3变体与注释
粘贴在一起version: '3'
services:
app:
image: training/webapp
networks:
- <<network created by other compose file>>
external_links:
- postgres:postgres
networks:
<<network created by other compose file>>:
external: true
答案 2 :(得分:0)
最近我遇到了 Name resolution failure
,试图链接由docker-compose
v3处理的代表我的情况下代表gRPC服务器和客户端的2个容器,但是失败了,并带有external_links
。 / p>
我可能会复制此处发布的一些信息,但会尝试总结一下 因为所有这些都帮助我解决了问题。
来自external_links
文档(如之前的回答中所述):
如果您使用的是版本2或更高版本文件格式,则外部创建的容器必须至少连接到与其链接的服务相同的网络之一。
以下配置解决了该问题。
version: '3'
services:
app:
networks:
- some-network
networks:
some-network:
服务器容器已按预期配置。
services:
app:
external_links:
# Assigning easy alias to the target container
- project-grpc-server_app_1:server
networks:
# Mentioning current container as a part of target network
- project-grpc-server_some-network
networks:
# Announcing target network (where server resides)
project-grpc-server_some-network:
# Telling that announced network already exists (shouldn't be created but used)
external: true
使用默认设置(未配置container_name
)时,用于配置客户端容器的技巧在前缀中 强>。在我的情况下,与project-grpc-server_
一起使用时,网络名称的前缀为 docker-compose
,而名称本身为some-network
( project-grpc-server_some-network
)。因此,在处理单独的版本时应传递完全合格的网络名称。
虽然容器名称很明显,因为它不时出现在屏幕上,但当初次面对Docker的这一部分时,完整的网络名称并不是容易猜测的候选,除非{{1} }。
我不是Docker专家,所以如果这一切在Docker世界中是显而易见的和必不可少的,请不要判断得太严格。