[英]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.