gpt4 book ai didi

docker - Composer install 在 Dockerfile 中运行时不安装包

转载 作者:行者123 更新时间:2023-12-02 18:09:42 25 4
gpt4 key购买 nike

我似乎无法在 Dockerfile 中运行 composer install,但我可以在构建镜像并运行容器后在容器中运行。

这是来自 Dockerfile 的命令:

RUN composer require drupal/video_embed_field:1.5
RUN composer install --no-autoloader --no-scripts --no-progress

输出是:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update

但是在使用 docker-compose 运行容器之后:

...
drupal:
image: docker_image
container_name: container
ports:
- 8081:80
volumes:
- ./container/modules:/var/www/html/web/modules

links:
# Link the DB container:
- db

运行 docker exec composer install 将正确安装软件包:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 1 installs, 0 updates, 0 removals
...
Generating autoload files

我假设 composer.json 和 composer.lock 文件是正确的,因为我可以在容器中运行 composer install 命令而无需任何进一步的努力,但只能在容器运行之后。

更新尝试将 Composer 命令与:

RUN composer require drupal/video_embed_field:1.5 && composer install

同样的问题,“无需安装或更新”。最终我想继续在 Dockerfile 中使用单独的 RUN 语句来利用 docker 缓存。

最佳答案

您的问题来自这样一个事实,即 docker-compose 旨在编排多个 docker 容器构建并同时运行,并且不知何故并没有真正轻松地展示它在幕后所做的事情对于以 docker 开头的人。

docker-compose up 后面有四个步骤:

  • docker-compose build 如果需要,如果还没有现有图像,则创建图像
  • docker-compose create 如果需要,如果还没有容器,则创建容器
  • docker-compose start 启动现有容器
  • docker-compose logs 记录容器的标准错误和标准输出

所以你必须在那里发现,包含在你 Dockerfile 中的操作是在镜像创建步骤中执行的。
在容器步骤开始时执行挂载文件夹时。

因此,当您尝试在 composer.lockcomposer.json 等文件上使用 RUN 命令时,这是图像创建步骤的一部分> 在开始步骤安装的,你最终没有任何东西可以通过 composer 安装,因为你的文件还没有安装在任何地方。

如果你对那些文件进行 COPY 可能会真正让你到达某个地方,因为你将把 Composer 文件作为图像的一部分。

这就是说,请注意已安装的源文件夹将完全覆盖安装点,因此您最终可能会期待供应商文件夹而没有它。
理想情况下,您应该将其作为 ENTRYPOINT,这发生在容器启动的最后一步。

这里是一个小的开发比较:一个 docker 镜像对于一个 docker 容器就像一个类对于一个类的一个实例——一个对象。
您的容器都是从可能很久以前构建的图像创建的。
Dockerfile 中的大部分步骤发生在镜像创建时,而不是在容器启动时。
而 docker-compose 的大部分指令都是针对容器构建的自动化,包括文件夹的挂载。

关于docker - Composer install 在 Dockerfile 中运行时不安装包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769756/

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