composer 安装 GitLab CI/CD 后,docker 容器中缺少供应商目录

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

我正在尝试创建一个 GitLab 管道,但由于某种原因,我运行后:

- docker run image composer install
- docker run image ls

它显示了我的项目的每个文件,除了供应商目录,即使在作业日志中我看到依赖项确实安装了。

CONDUCT.md
CONTRIBUTING.md
Dockerfile
LICENSE.md
README.md
TODO.md
Vagrantfile
composer.json
composer.lock
config
data
html
module
phpcs.xml
phpunit.xml.dist
public

我错过了什么吗?

php docker composer-php
1个回答
0
投票

Docker run
将把图像运行到一个独特的容器中。命令完成后,您的容器将“完成”,并且您执行的任何内容都可以在该容器的卷中使用。 当您再次执行
docker run
时,会创建另一个容器,因此之前的命令永远不会在该容器中执行(使用容器的卷)。

如果您想将其与虚拟机进行比较(以更好地理解它),每个

docker run
命令都会启动一个不同的虚拟机。命令完成后,虚拟机将暂停。

根据你的问题,我不确定你想做什么,所以我只描述2种情况。

如果您只想在映像中运行命令,但不想构建新映像。您应该将其添加到您的 gitlab-ci.yaml 文件中。它将运行您图像中的命令。

#.gitlab-ci.yaml
your_job: 
   image: [your_image]
   script: 
      - composer install 
      - ls 

如果您想构建镜像,则必须将命令添加到 Dockerfile 中。然后在管道中构建图像。

# Dockerfile

FROM   [your_image] 

WORKDIR  /var/www

COPY   . . 

RUN    composer install \ 
       && ls

然后您可以将以下脚本添加到您的管道中

# .gitlab-ci.yml
your_job:
   script:
      - docker build -t [repository]:[tag]
      - docker push [repository]:[tag]

我还看到有些人在 docker 构建范围之外运行

composer install
,然后复制项目和供应商目录。通常是因为它们需要不同的系统包,但您可以为此使用多阶段 docker 构建。

© www.soinside.com 2019 - 2024. All rights reserved.