代码之家  ›  专栏  ›  技术社区  ›  mysliwiec_tech

与Docker Compose存在网络问题

  •  0
  • mysliwiec_tech  · 技术社区  · 6 年前

    我正在尝试使用以下配置:

    docker-compose.yml公司

    version: "3"
    services:
      web:
        build: .
        ports:
          - "3000:3000"
        depends_on:
          - db
      db:
        image: onjin/alpine-postgres
        environment:
          POSTGRES_PASSWORD: password
    

    另一个文件是dockerfile:

    FROM alpine
    
    RUN apk update && apk add --no-cache postgresql-client
    COPY Bot/ /Bot
    
    ENV PGHOST=db PGPASSWORD=password
    
    RUN psql -h "$PGHOST" -f /Bot/test/database_schema.sql
    

    我不知道为什么在运行“docker compose up”时总是出现这个错误:

    psql:无法将主机名“db”转换为地址:name不 决定

    有人能帮我调试一下吗?似乎“db”主机名没有在Docker环境中传播,但不知道原因。

    1 回复  |  直到 6 年前
        1
  •  1
  •   dongi    6 年前

    您看到的问题与以下事实有关: 码头工人作曲家 运行服务的顺序与yaml文件中定义的顺序相同。所以基本上当你跑步的时候 网状物 服务 分贝 服务尚不存在,因此无法解析其主机名。

    如果更改docker-compose.yaml中的顺序:

    version: "2"
    
    services:
       db:
        image: onjin/alpine-postgres
        environment:
          POSTGRES_PASSWORD: password 
       web:
        build: .
        ports:
          - "3000:3000"
        depends_on:
          - "db"
        tty: true
    

    并运行 Docker合成-D 您将不再看到错误,服务将启动:

    sudo docker-compose ps
        Name                   Command               State           Ports          
    -------------------------------------------------------------------------------
    db_1    /docker-entrypoint.sh postgres   Up      5432/tcp               
    web_1   /bin/sh                          Up      0.0.0.0:3000->3000/tcp 
    

    主机名可正确解析:

    sudo docker-compose run web "ping" "db"
    PING db (172.18.0.2): 56 data bytes
    64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.096 ms
    64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.101 ms
    64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.097 ms
    64 bytes from 172.18.0.2: seq=3 ttl=64 time=0.106 ms