【问题标题】:How to allow a docker container to communicate with another container over localhost如何允许 docker 容器通过 localhost 与另一个容器通信
【发布时间】:2021-06-02 17:30:38
【问题描述】:

我有一个独特的情况,我需要能够通过自定义本地域 (example.test) 访问容器,我已将其添加到指向 127.0.0.1/etc/hosts 文件中。我用于 OIDC 的库使用此域来重定向浏览器,如果它是内部 docker 主机名,显然浏览器将无法解析。

我尝试将它指向 example.test,但它说它无法连接。我也试过查找 docker 网络的私有 ip,结果只是超时。

【问题讨论】:

    标签: docker networking docker-compose


    【解决方案1】:

    network_mode: host 添加到docker-compose.yml 文件中调用应用程序的服务定义中。这允许对 localhost 的调用被路由到服务器的 localhost 而不是容器的 localhost。

    例如

    docker-compose.yml

    version: '3.7'
    services:
      mongodb:
        image: mongo:latest
        restart: always
        logging:
          driver: local
        environment:
          MONGO_INITDB_ROOT_USERNAME: ${DB_ADMIN_USERNAME}
          MONGO_INITDB_ROOT_PASSWORD: ${DB_ADMIN_PASSWORD}
        ports:
          - 27017:27017
        volumes:
          - mongodb_data:/data/db
      callingapp:
        image: <some-img>
        restart: always
        logging:
          driver: local
        env_file:
          - callingApp.env
        ports:
          - ${CALLING_APP_PORT}:${CALLING_APP_PORT}
        depends_on:
          - mongodb
        network_mode: host // << Add this line
      app:
        image: <another-img>
        restart: always
        logging:
          driver: local
        depends_on:
          - mongodb
        env_file:
          - app.env
        ports:
          - ${APP_PORT}:${APP_PORT}
    
    volumes:
      mongodb_data:
    

    【讨论】:

    • 这通常会禁用 Docker 的网络;这意味着使用app 作为主机名的容器间通信将不起作用,并且您不能使用ports: 禁用或重新映射容器端口。我不建议将其作为通用解决方案。
    • @DavidMaze 很高兴知道!你有更好的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2015-05-22
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多