繁体   English   中英

docker-compose存在网络问题

[英]Having networking issues with docker-compose

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

泊坞窗,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”转换为地址:名称无法解析

谁能帮我调试一下吗? 似乎“ db”主机名未在docker环境中传播,但不知道其原因。

您看到的问题与docker-composer以与yaml文件中定义的服务相同的顺序运行服务有关。 因此,基本上,在您运行Web服务db服务的那一刻尚不存在,因此其主机名不可解析。

如果您在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-compose up -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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM