Проблемы с сетью в docker-compose - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь использовать следующую конфигурацию:

докер-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" не распространяется в среде докеров, но не знает причину этого.

1 Ответ

0 голосов
/ 24 января 2019

Проблема, с которой вы сталкиваетесь, связана с тем, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...