在新容器 docker 构建期间访问正在运行的容器

2023-12-05

如何在新容器docker构建期间访问正在运行的容器?

应用容器构建过程中需要访问数据库容器

docker 撰写

version: '3'

services:
  db:
    build: ./db
    ports:
      - 1433:1433
    networks:
      - mynetwork
  app:
    build: ./app
    ports:
      - 8080:8080
    depends_on:
      - db
    networks:
      - mynetwork

networks:
  mynetwork: {}

尝试在构建应用程序容器之前启动数据库,但不起作用:

  • docker-compose 构建数据库
  • docker-compose up -d db
  • docker-compose 构建应用程序

你不能,而且这不是一个好主意。例如,如果您运行:

docker-compose build
docker-compose down -v
docker-compose up

The down步骤将删除所有容器及其底层存储(包括数据库的内容);那么up步骤将从现有映像创建所有新容器,而无需重新运行 Dockerfile。即使您添加了一个--build选项,Docker 的层缓存将得出数据库设置命令的文件系统输出未更改的结论,并将跳过重新运行该步骤。

如果您这样做,您可能会遇到类似的问题docker push将构建的映像复制到某个注册表并在不同的主机上运行它:由于映像是可重用的,因此 Dockerfile 中的命令不会重新运行,但它不是同一个数据库,因此设置将无法完成。

根据您尝试执行的设置类型,最好的方法可能是使用运行应用程序数据库迁移的入口点脚本来配置映像,然后exec "$@"运行主容器命令。它还可以将设置命令放入数据库的/docker-entrypoint-initdb.d目录,但如果应用程序的数据库架构发生更改,这些将不会重新运行。

在技​​术层面上,这是行不通的,因为docker build环境不在任何特定的 Docker 网络上,也不在mynetwork您手动指定也不是default网络 Compose 自行创建。构建序列与运行生成的映像分开运行,并且它会忽略大多数 Docker Compose 设置。

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

在新容器 docker 构建期间访问正在运行的容器 的相关文章

随机推荐