首页 > 解决方案 > 如何允许 docker 容器通过 localhost 与另一个容器通信

问题描述

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

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

标签: dockernetworkingdocker-compose

解决方案


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

例如

码头工人-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:

推荐阅读