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

2024-02-19

我有一个项目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,那么除此之外我还能做什么来允许构建时网络呢?


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在构建时在 Docker 镜像之间建立网络? 的相关文章

随机推荐