我正在尝试连接两个容器,其中一个正在使用 pymongo,我想从一个容器内部连接到第二个容器,我可以从运行 docker 的机器连接到它,但是我无法从一个容器连接到另一个容器,我已经尝试了所有可能的解决方案,但我确信我错过了一些东西:
docker-compose.yaml
version: "3"
networks:
shared:
driver: bridge
services:
application:
environment:
....
image: application:latest
ports:
....
volumes:
....
depends_on:
- mongo
networks:
- shared
mongo:
image: mongo:4.2-bionic
ports:
- "27017:27017"
networks:
- shared
连接:
def get_connection():
client = MongoClient('localhost', 27017)
database = client.database.beacons
return database
错误:
Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 621d188d8169b99b9cfc4c5e, topology_type: Unknown, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused')>]>
docker-compose 网络中的容器通过其服务名称引用,因此在 pymongo 连接中使用:
client = MongoClient('mongo', 27017)
有同样的问题, 虽然我的 Python 应用程序容器使用了一个简单的 Dockerfile, MongoDB 镜像取自 Docker 镜像。 在客户端创建行中将主机重命名为 MongoDB 容器的名称即可完成任务。
创建容器:
docker run -d --network statusmapnet -p 27017:27017 --name statusmap-mongodb mongo
docker run -d --network statusmapnet -p 5000:5000 --name statusmap statusmap-flask
服务器.py:
client = pymongo.MongoClient('statusmap-mongodb', 27017)