【问题标题】:How can docker-compose be used to build Dockerfiles?如何使用 docker-compose 构建 Dockerfiles?
【发布时间】:2021-01-04 09:22:43
【问题描述】:

我有这样的结构:

在我的 Makefile 中,我构建了 dockerfile:

sudo docker build --build-arg PHP_VERSION=7.4 -t kaiza/image-php74 - < dockerfile/Dockerfile.php

并且 kaiza/image-php74 在本地创建得很好,如果我这样做 docker images,我会得到:

然后,在我的 docker-compose.php74.yml 中:

version: '2.4'

services:
  php7.4:
    image: "kaiza/image-php74"
    container_name: "kz-php74"
    hostname: "kz-php74"
    user: 1000:1000
...

但是,当我运行它时

docker-compose -f docker-compose/php/docker-compose.php74.yml up --build -d

我收到此错误:

“对 kaiza/image-php74 的拉取访问被拒绝,存储库不存在或可能需要 'docker login':拒绝:请求的资源访问被拒绝”

任何人知道如何在不通过 registry 解决方案的情况下解决这个问题(将所有内容都保留在本地)?

谢谢。

【问题讨论】:

  • 您需要在本地构建kaiza/image-php74。 Docker 总是检查它是否已经在本地拥有它,如果没有则尝试拉取它。 Docker-Compose 不构建镜像,它只是使用它们!
  • 什么是kaiza/image-php74?它在公共 docker hub 上不存在。如果它不在私有存储库中,它应该存在于本地。镜像是在本地构建的吗?请使用以下命令进行检查。 docker images | grep kaiza/image-php74
  • @Deitsch 我像这样构建它:sudo docker build --build-arg PHP_VERSION=7.4 -t kaiza/image-php74 - &lt; dockerfile/Dockerfile.php
  • @myeongkilkim 我得到一个结果:kaiza/image-php74 latest 37f36003df04 15 hours ago 258MB

标签: docker docker-compose dockerfile devops


【解决方案1】:

docker-compose 可用作构建 Dockerfile 的工作流程的一部分。

安排这个的一个好方法是在根目录中有一个 docker-compose.yml,然后为每个服务有一个子文件夹。

docker-compose.yml

version: "3.8"

services:
  php7.4:
  image: kaiza/image-php74:latest
  build:
    context: php74
    dockerfile: Dockerfile
    args:
      PHP_VERSION: ${VERSION-7.3}

假设 docker-compose 到 php74 Dockerfile 的相对路径是 php74/Dockerfile 那么:

docker-compose build php7.4 将构建图像并将图像标记为 kaiza/image-php74,docker-compose updocker-compose run php7.4 将在需要时构建图像,或者使用本地构建的图像(如果可用)。

构建部分的完整参考可在 github 上获得

【讨论】:

  • 感谢您的回答。做docker-compose build php7.4 就等于docker build --build-arg PHP_VERSION=7.4 -t kaiza/image-php74 - &lt; dockerfile/Dockerfile.php,不是吗?这可能是一个线索,但是 Dockerfile.php 有一个 PHP_VERSION 参数;我将如何从 docker-compose 传递它?
  • build: 组件中使用args:,例如build: args: PHP_VERSION: 7.4
  • 添加了 github 上完整参考的链接和使用 args 的示例,以及默认环境 arg。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多