【问题标题】:How to access containers in host network using docker compose?如何使用 docker compose 访问主机网络中的容器?
【发布时间】:2021-11-04 13:18:30
【问题描述】:

我尝试在主机网络上构建以下 docker-compose 文件。构建成功,但构建后我看不到任何结果。

version: "3.3"
services:
    mycontainer_3000:
        container_name: mycontainer_3000
        build:
            context: src/mycontainer_3000
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3000:latest 
        restart: unless-stopped
        network_mode: host
        volumes:
            - "./src/mycontainer_3000:/usr/src/app"
        depends_on:
            - mycontainer_3001
    mycontainer_3001:
        container_name: mycontainer_3001
        build:
            context: src/mycontainer_3001
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3001:latest
        volumes:
            - "./src/mycontainer_3001:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3003:
        container_name: mycontainer_3003
        build:
            context: src/mycontainer_3003
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3003:latest
        network_mode: host
        volumes:
            - "./src/mycontainer_3003:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3002:
        container_name: mycontainer_3002
        build:
            context: src/mycontainer_3002
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3002:latest
        network_mode: host
        volumes:
            - "./src/mycontainer_3002:/usr/src/app"
    mongo:
        image: mongo
        restart: always
        network_mode: host
        volumes:
            - "./db/:/data/db"

    mongo-express:
        image: mongo-express
        restart: always
        network_mode: host
        environment:
            ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/

当我使用 docker-compose up 编译时,所有容器都创建成功。 但是当我尝试使用 http://localhost:3000 或任何其他端口访问任何容器时,它显示该端口上没有运行任何内容!

【问题讨论】:

  • 您几乎不需要主机网络,并且它不适用于非 Linux 主机或 Docker 以其他方式在 VM 中运行。你的主机系统是什么?如果您的服务正在侦听单个端口,您可以使用像 ports: ['3000:3000'] 这样的 Compose 设置吗?
  • 我正在使用 Docker for Desktop。错误是这样的:ERROR: for mycontainer_3002 "host" network_mode is incompatible with port_bindings
  • 如果您使用的是 Docker Desktop,主机网络可能无法按您预期的方式工作。删除network_mode: host 选项。

标签: node.js mongodb docker docker-compose


【解决方案1】:

尝试添加ports 以明确公开它们

version: "3.3"
services:
    mycontainer_3000:
        container_name: mycontainer_3000
        build:
            context: src/mycontainer_3000
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3000:latest 
        restart: unless-stopped
        network_mode: host
        #HERE
        ports: '3000:3000'
        volumes:
            - "./src/mycontainer_3000:/usr/src/app"
        depends_on:
            - mycontainer_3001
    mycontainer_3001:
        container_name: mycontainer_3001
        build:
            context: src/mycontainer_3001
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3001:latest
        #HERE
        ports: '3001:3001'
        volumes:
            - "./src/mycontainer_3001:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3003:
        container_name: mycontainer_3003
        build:
            context: src/mycontainer_3003
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3003:latest
        network_mode: host
        #HERE
        ports: '3003:3003'
        volumes:
            - "./src/mycontainer_3003:/usr/src/app"
        depends_on:
            - mongo
    mycontainer_3002:
        container_name: mycontainer_3002
        build:
            context: src/mycontainer_3002
            dockerfile: ./../../Dockerfile.dev
            args:
                - T_ENV
        image: myproject/mycontainer_3002:latest
        network_mode: host
        #HERE
        ports: '3002:3002'
        volumes:
            - "./src/mycontainer_3002:/usr/src/app"
    mongo:
        image: mongo
        restart: always
        network_mode: host
        #HERE
        ports: '27017:27017'
        volumes:
            - "./db/:/data/db"

    mongo-express:
        image: mongo-express
        restart: always
        network_mode: host
        #HERE
        ports: '8080:8080'
        environment:
            ME_CONFIG_MONGODB_URL: mongodb://mongo:27017/

【讨论】:

  • 尝试这个会出错:services.mycontainer_3000.ports contains an invalid type, it should be an array 如果我在数组中提供它:ERROR: for mycontainer_3002 "host" network_mode is incompatible with port_bindings
  • 我已经更新了 YML 内容,现在检查它是否有效。我已将端口号更改为字符串
猜你喜欢
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多