如何连接单独的docker容器?

问题描述 投票:0回答:3

我搭建了node、elasticsearch、mongo三个docker镜像。然后将它们推送到 docker hub。提取这些图像后,我使用命令 docker run 运行它们。他们正在成功运行。但是节点应用程序无法连接到 mongo 或弹性。我试过创建网络并向其中添加容器,但没有帮助。有人可以帮忙解决这个问题吗?

docker docker-compose dockerfile docker-machine
3个回答
0
投票

这取决于各个容器的运行位置。如果它们在同一台主机上运行,您可以将它们连接到同一桥接网络。 参考这里:https://docs.docker.com/network/bridge/

如果它们在不同的主机上运行,您将不得不使用主机网络并公开相关端口。参考这里:https://docs.docker.com/network/host/


0
投票

使用多个容器时,最好使用 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

你的问题不清楚所以我不能回答更多


-1
投票

一个正在运行的容器与另一个容器连接的方案要看具体场景。虽然命令

docker run --link postgresql -p 5050:80 node-web-server
在某些情况下可能有效,但在连接不同类型的容器(例如 node.js 容器与数据库容器)时可能还不够。在这种情况下,确保数据持久化至关重要。仅链接容器可能还不够。

要持久化数据,必须链接 Docker 卷和本地目录。为此,制作了一段视频来阐明所有必要的要点。

视频

© www.soinside.com 2019 - 2024. All rights reserved.