docker compose:无法使用同一网络将节点容器连接到mongo容器

时间:2018-12-24 18:26:54

标签: mongodb docker docker-compose

这是docker-compose.yml         版本:“ 3”

    services:
    web:
        build: ./rqiim
        command: curl "127.0.0.1:27017"
        volumes:
        - ./rqiim:/app
        - /app/node_modules/
        environment:
        - MONGO_HOSTNAME=127.0.0.1
        ports:
        - "8080:8080"
        networks:
        - host
    mongodb:
        image: mongo:3.4.18-jessie
        container_name: mongodb
        volumes:
        - /data/db:/data/db
        - ./mongo:/etc/mongo
        command: --config /etc/mongo/mongod.conf
        hostname: mongod1
        ports:
        - "27017:27017"
        networks:
        - host
    networks:
      host: 

当我运行docker-compose up时,我得到Failed to connect to 127.0.0.1 port 27017: Connection refused
似乎是什么问题,它们在同一网络上,而且我从docker本地从外部连接到mongodb容器就好了。
这是/etc/mongo/mongod.conf

的内容
        storage:
            dbPath: /data/db
            journal:
                enabled: true
        systemLog:
            destination: file
            logAppend: true
            path: /var/log/mongodb/mongod.log
        # network interfaces
        net:
            port: 27017
        replication:
            replSetName: rs0

1 个答案:

答案 0 :(得分:3)

与Docker中的其他所有地方一样,127.0.0.1通常表示“此容器”。 host文件中对docker-compose.yml的各种提及实际上创建了一个桥式NAT网络,该网络恰好被命名为“主机”。它不启用主机联网模式。话虽如此,主机联网模式通常是不必要的,所以让我们做对吧:

首先,Docker Compose会自动为每个单独的docker-compose.yml文件创建一个专用的网桥型网络,因此这里根本不需要任何networks:块。由于这样做,服务块webmongodb的名称将成为一个容器到达另一个容器的有效主机名。

web:服务中,您将其命令替换为curl命令。该命令完成后,服务将退出,几乎可以肯定这不是您想要的。您尚未包括相关的Dockerfile,但我猜想它以类似CMD ["npm", "start"]的行结尾,该行提供了更有用的默认命令。卷的声明也有些奇怪:拥有卷来保存代码不是典型的用例,通常您将COPY(已构建的)应用程序树Dockerfile中插入图像。 (使用卷来保存持久数据和注入配置文件,就像使用mongodb:服务一样,是非常合理的。)

除了在非常特殊的情况下,您还不需要显式设置单个容器的container_name:hostname:

将其剥离并固定主机名,我们应该得到:

version: '3'
services:
    web:
        build: ./rqiim
        environment:
        - MONGO_HOSTNAME=mongodb
        ports:
        - "8080:8080"
    mongodb:
        image: mongo:3.4.18-jessie
        volumes:
        - /data/db:/data/db
        - ./mongo:/etc/mongo
        command: --config /etc/mongo/mongod.conf
        ports:
        - "27017:27017"