gpt4 book ai didi

postgresql - 如何在构建时在 Docker 镜像之间建立网络?

转载 作者:行者123 更新时间:2023-12-02 18:06:40 32 4
gpt4 key购买 nike

我有一个项目 sample提供两项服务,databaseapp ,声明于 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负责下载和安装 Postgre,以及在该集群中启动 Postgre 集群和数据库。这个数据库的表是通过 CREATE TABLE创建的在构建时 RUN命令。 app.Dockerfile负责下载和安装编译器,以及编译源代码。
为了 app.Dockerfile待建形象, database.Dockerfile的图像必须首先构建。这是因为,在编译时,源代码中的 SQL 查询字符串会根据 database.Dockerfile 中创建的数据库进行验证。 .
编译器使用 DATABASE_URL连接到包含用于验证查询的表的 Postgre 数据库。在此 DATABASE_URL ,指定地址为 database:5432 ,因为服务发现可用于非默认桥接网络。
我的问题是在运行 docker-compose up , app在构建时无法连接到 database在构建时。一个 RUN ping databaseapp.Dockerfile失败 ping: database: No address associated with hostname .然而,从 sample_default 上的两个图像启动一个容器网络(手动而不是通过 docker-compose )并运行 ping database来自 app的容器成功。
我已经指定了 networkbuilddocker-compose.yml ,那么除此之外我还能做些什么来允许构建时网络呢?

最佳答案

在构建时,没有网络配置出现。因为 Docker 容器就像 VM。您无法在启动时通过其 IP 地址连接到 VM。 docker 容器也一样。唯一的区别是容器快速启动过程与虚拟机不同;因此,您需要等到它出现。启动容器后,它的生命周期就是运行时。

关于postgresql - 如何在构建时在 Docker 镜像之间建立网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64201177/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com