首页 > 解决方案 > 容器在 docker-compose 中无法相互访问

问题描述

我正在使用这个 docker-compose.yml 文件:

version: "3.7"

networks:
  test_net:
    internal: true

services:
  A:
    image: nginx:1.17
    networks:
      - test_net

  B:
    image: node:14-alpine
    command: wget A
    networks:
      - test_net

输出:

Creating network "test_test_net" with the default driver
Creating test_B_1 ... done
Creating test_A_1 ... done
Attaching to test_A_1, test_B_1
B_1  | Connecting to A (172.24.0.2:80)
B_1  | wget: can't connect to remote host (172.24.0.2): Host is unreachable
test_B_1 exited with code 1

容器 B 可以解析容器 A 的名称,但无法访问它。

编辑:我一直在环顾四周,似乎它可能是 docker0 接口的系统网络问题。

标签: dockernetworkingdocker-composednssystemd

解决方案


昨天我遇到了类似的问题,当我提出这样的事情时:

network: 
 it-network:
   driver: bridge

我认为这些服务无法相互访问,因为将网络的创建委托给 docker-compose 文件。

但是当我首先创建网络时:

docker network create --driver bridge it-network

然后在 docker-compose.yml 文件中使用

services: 
 service1: 
  networks:
   - it-networks
.....
networks:
 default: 
  external: 
    name: it-network

工作正常。

我使用的有用命令:

docker network inspect it-network

我发现的其他解决方案是使用扩展指令,这样您可以在服务和不同的 docker-compose 文件之间共享配置。

https://docs.docker.com/compose/extends/

但我还没有测试它。

我在 docker-compose 文件中使用的服务

  • postgres(来自 docker hub)
  • Jira Software(来自 Dockerfile 的预编译映像)

我的 docker compose 文件是这样的:


version: '3'

services:
  postgresql-jira:
    image: postgres:9.5-alpine
    volumes:
      - postgresqldata:/var/lib/postgresql/data
    environment:
      - 'POSTGRES_USER=devops'
      # CHANGE THE PASSWORD!
      - 'POSTGRES_PASSWORD=xxx'
      - 'POSTGRES_DB=jiradb'
      - 'POSTGRES_ENCODING=UNICODE'
      - 'POSTGRES_COLLATE=C'
      - 'POSTGRES_COLLATE_TYPE=C'
    logging:
      # limit logs retained on host to 25MB
      driver: "json-file"
      options:
        max-size: "500k"
        max-file: "50"
  jira-software:
    depends_on:
      - postgresql-jira
    image: XXX/jira-server:8.8.1
    volumes:
      - jiradata:/var/atlassian/jira
    ports:
      - '80:8080'
    environment:
      - 'JIRA_DATABASE_URL=postgresql://devops@postgresql/jiradb'
      - 'JIRA_DB_PASSWORD=xxx'
      - 'SETENV_JVM_MINIMUM_MEMORY=2048m'
      - 'SETENV_JVM_MAXIMUM_MEMORY=4096m'
      - 'JIRA_PROXY_NAME='
      - 'JIRA_PROXY_PORT='
      - 'JIRA_PROXY_SCHEME='
    links: 
      - "postgresql-jira:postgresql-jira-db"
    logging:
      # limit logs retained on host to 25MB
      driver: "json-file"
      options:
        max-size: "500k"
        max-file: "50"

volumes:
  jiradata:
    external: false
  postgresqldata:
    external: false

networks:
  default:
    external:
      name: it-network




推荐阅读