我有一个项目sample
有两项服务,database
and app
,声明于docker-compose.yml
:
version: "3.8"
services:
database:
image: sample/database
build:
context: .
dockerfile: database.Dockerfile
network: sample_default
ports:
- "8001:5432"
app:
image: sample/app
build:
context: .
dockerfile: app.Dockerfile
network: sample_default
args:
- DATABASE_URL=postgresql://postgres:password@database:5432/cluster
depends_on:
- database
networks:
sample_default: {}
database.Dockerfile
负责下载和安装 Postgresql,以及启动 Postgresql 集群和该集群中的数据库。该数据库的表是通过创建的CREATE TABLE
在构建时RUN
命令。
app.Dockerfile
负责下载和安装编译器以及编译源代码。
为了app.Dockerfile
的形象要建立,database.Dockerfile
必须先树立形象。这是因为,在编译时,源代码中的 SQL 查询字符串会根据在中创建的数据库进行验证。database.Dockerfile
.
编译器使用DATABASE_URL
连接到 Postgresql 数据库,该数据库包含用于验证查询的表。在此范围内DATABASE_URL
,指定地址为database:5432
,因为服务发现可以在非默认桥接网络上使用。
我的问题是在跑步时docker-compose up
, app
在构建时无法连接到database
在构建时。 ARUN ping database
in app.Dockerfile
失败了ping: database: No address associated with hostname
。然而,从两个镜像启动一个容器sample_default
网络(手动而不是通过docker-compose
)并运行ping database
from app
的容器成功。
我已经指定了network
under build
in docker-compose.yml
,那么除此之外我还能做什么来允许构建时网络呢?