我搭建了node、elasticsearch、mongo三个docker镜像。然后将它们推送到 docker hub。提取这些图像后,我使用命令 docker run 运行它们。他们正在成功运行。但是节点应用程序无法连接到 mongo 或弹性。我试过创建网络并向其中添加容器,但没有帮助。有人可以帮忙解决这个问题吗?
这取决于各个容器的运行位置。如果它们在同一台主机上运行,您可以将它们连接到同一桥接网络。 参考这里:https://docs.docker.com/network/bridge/
如果它们在不同的主机上运行,您将不得不使用主机网络并公开相关端口。参考这里:https://docs.docker.com/network/host/
使用多个容器时,最好使用 Docker compose。 您可以在那里创建一个定义服务(您的容器)的 docker-compose.yml 文件。
这里是 node、mongo 和 elasticsearch 的 docker-compose.yml 示例
version: "3"
services:
backend:
container_name: nodejs
restart: always
build: node
ports:
- "3010:3010"
volumes:
- .:/app
- ./error.log:/usr/src/app/error.log
links:
- mongo
- elasticsearch
mongo:
container_name: mongo
image: mongo
ports:
- "27017:27017"
volumes:
- ./data:/data/db
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.0
environment:
- node.name=es01
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
volumes:
esdata:
driver: local
你的问题不清楚所以我不能回答更多
一个正在运行的容器与另一个容器连接的方案要看具体场景。虽然命令
docker run --link postgresql -p 5050:80 node-web-server
在某些情况下可能有效,但在连接不同类型的容器(例如 node.js 容器与数据库容器)时可能还不够。在这种情况下,确保数据持久化至关重要。仅链接容器可能还不够。
要持久化数据,必须链接 Docker 卷和本地目录。为此,制作了一段视频来阐明所有必要的要点。