Docker 从容器内部复制 Composer 供应商

问题描述 投票:0回答:2

我已经制作了一个容器,我正在通过

docker-compose
构建它,这是
.yml

  gateway:
    build: .
    image: sng
    container_name: sng
    command: tail -F /dev/null
    ports:
      - "10091:10091"
    volumes:
      - vendor:/root/vendor

volumes:
  vendor:

并且

Dockerfile
只是拉取图像并运行
composer install
:

FROM php:7-fpm-alpine

EXPOSE 10091
WORKDIR /root
COPY . .

RUN apk add composer && composer install --no-progress

有没有办法让我自动将创建的

vendor
文件夹同步回代码库,而无需从主机运行
docker cp

php docker docker-compose composer-php
2个回答
0
投票

天哪,我很抱歉!我做了你想要的,只是将供应商卷安装到供应商文件夹中。

volumes: 
- path/to/local/vendor:vendor


0
投票

我将通过几个步骤向您解释到底发生了什么以及为什么安装的依赖项没有复制到主机。

  1. 您通过 Dockerfile 将本地文件从主机复制到容器
  2. Dockerfile执行命令安装依赖(现在你的依赖已经安装在docker上了)
  3. 您已在容器中为供应商创建了一个卷。
  4. 现在启动容器,本地文件将移动到容器中的适当位置。
  5. 因为您使用数据卷来存储供应商目录,所以它不会被您计算机中的文件替换(否则供应商目录将被替换为任何内容)

我已经看到了解决这个问题的各种方法。在我看来,最好不要在容器构建期间安装依赖项(这是可能的,但效率低下),而是仅在容器启动后安装。

容器启动后,您可以使用示例命令在容器上安装依赖项,并将它们与本地计算机组装。没有什么可以阻止您将命令移动到将在 docker 启动期间运行的 .sh 文件,如果具有依赖项的文件夹不存在,它将安装它们。

docker exec -it docker_name composer install
© www.soinside.com 2019 - 2024. All rights reserved.