Связь с контейнером Docker - «Не удалось перевести имя хоста \« mydbalias \ »в адрес: временный сбой в разрешении имени» - PullRequest
0 голосов
/ 23 января 2019

У меня есть контейнер PostgreSQL и серверный контейнер Swift.Мне нужно передать IP БД на сервер, чтобы запустить его.Таким образом, я создал псевдоним для БД в моей сети мостов.Взгляните на мой docker-compose.yml

version: '3'

services:
    db:
      build: database
      image: postgres
      networks:
        mybridgenet:
          aliases:
            - mydbalias
    web:
      image: mywebserver:latest
      ports: 
        - "8000:8000"
      depends_on: 
        - db
      networks:
        - mybridgenet
      environment:
        WAIT_HOSTS: db:5432

networks:
  mybridgenet:
    driver: bridge

Dockerfile для создания веб-сервера.

FROM swift:4.2.1

RUN apt-get update && apt-get install --no-install-recommends -y libpq-dev uuid-dev  && rm -rf /var/lib/apt/lists/*
EXPOSE 8000
WORKDIR /app

COPY client ./client
COPY Package.swift ./
COPY Package.resolved ./

COPY Sources ./Sources
RUN swift build

COPY pkg-swift-deps.sh ./
RUN chmod +x ./pkg-swift-deps.sh
RUN ./pkg-swift-deps.sh ./.build/debug/bridgeOS

FROM busybox:glibc

COPY --from=0 /app/swift_libs.tar.gz /tmp/swift_libs.tar.gz
COPY --from=0 /app/.build/debug/bridgeOS /usr/bin/

RUN tar -xzvf /tmp/swift_libs.tar.gz && \
    rm -rf /tmp/*

ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait
RUN chmod +x /wait

CMD /wait && mywebserver db "10.0.2.2"


База данных Dockerfile

FROM postgres

COPY init.sql /docker-entrypoint-initdb.d/

Сервер запущен с использованием mybinary mydbalias.Как я уже говорил ранее, я передаю псевдоним для запуска сервера.При этом я получаю следующую ошибку.

message: "could not translate host name \"mydbalias\" to address: Temporary failure in name resolution\n"

В чем может быть проблема?


ОБНОВЛЕНИЕ

После 4 дней изнурительного рейда я наконец нашел крысу.Он busybox контейнер.Я изменил его на ubuntu:16.04, и это бриз.Чувствую себя так хорошо от всей этой головоломки.Спасибо всем, кто помог.

1 Ответ

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

Simplify.Нет необходимости в явном сетевом объявлении (оно выполняется автоматически docker-compose, а также псевдонимами (службы получают имена своих узлов на основе имен служб)

docker-compose.yml

version: '3'
services:
    db:
      build: database
      image: postgres
    web:
      image: mywebserver:latest
      ports: 
        - "8000:8000"
      depends_on: 
        - db
      environment:
        WAIT_HOSTS: db:5432

Затем просто используйте db в качестве имени хоста для подключения к базе данных из web

...