Docker 容器通信 - "Could not translate host name " mydbalias\ " to address: Temporary failure in na



我有一个PostgreSQL容器和一个Swift服务器容器。我需要将数据库 IP 传递给服务器才能启动它。因此,我在自定义网桥网络中为 DB 创建了一个别名。看看我的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 用于构建 Web 服务器。

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 resolutionn"

可能是什么问题?


更新

经过4天的艰苦突袭,我终于找到了老鼠。他是busybox容器。我把它改成ubuntu:16.04,轻而易举。对这整个难题感觉很好。谢谢所有帮助过的人。

简化。不需要显式网络声明(由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连接到数据库

相关内容

最新更新