我有一个PostgreSQL容器和一个Swift服务器容器。我需要将DB 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
用于构建Web服务器的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"
可能是什么问题?
更新
经过四天的艰苦突袭,我终于找到了那只老鼠。他是busybox
容器。我将其更改为ubuntu:16.04
,这很容易。对整个难题感到非常高兴。谢谢大家的帮助。
答案 0 :(得分:0)
简化。您的显式网络声明(由from
自动完成,也不需要别名)(服务根据服务名称获取其主机名)
docker-compose.yml
docker-compose
然后只需使用version: '3'
services:
db:
build: database
image: postgres
web:
image: mywebserver:latest
ports:
- "8000:8000"
depends_on:
- db
environment:
WAIT_HOSTS: db:5432
作为主机名即可从db
连接到数据库