gpt4 book ai didi

docker - dockerfile完成构建后,供应商文件夹消失

转载 作者:行者123 更新时间:2023-12-02 20:57:55 26 4
gpt4 key购买 nike

标题说明了一切。我的docker-compose.yml:

swagger:
container_name: "swagger"
build:
context: web/
dockerfile: swagger/Dockerfile
dns:
- "8.8.8.8"
- "10.0.0.2"
volumes:
- ./web/swagger:/var/www/swagger:delegated
- ./web/api/controllers:/var/www/swagger/controllers:ro
- ./web/swagger/vendor:/var/www/swagger/vendor

我的 Dockerfile:
FROM php:zts-alpine3.11

RUN apk update && apk upgrade

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer

WORKDIR /var/www/swagger

COPY swagger/composer.json ./
COPY swagger/composer.lock ./
RUN composer install --no-scripts --no-autoloader

COPY swagger .
COPY api/controllers controllers

EXPOSE 80
CMD php -S 0.0.0.0:80

构建:
Building swagger
Step 1/11 : FROM php:zts-alpine3.11
---> d9293b396dfe
Step 2/11 : RUN apk update && apk upgrade
---> Using cache
---> f3ea600aa726
Step 3/11 : RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
---> Using cache
---> 4fe1237c5dc2
Step 4/11 : WORKDIR /var/www/swagger
---> Using cache
---> c669a7b04c35
Step 5/11 : COPY swagger/composer.json ./
---> c5e6e3bbb97f
Step 6/11 : COPY swagger/composer.lock ./
---> 01e36ce086ae
Step 7/11 : RUN composer install --no-scripts --no-autoloader
---> Running in e08f6cf0fd92
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 6 installs, 0 updates, 0 removals
- Installing doctrine/lexer (1.2.0): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.17.0): Downloading (100%)
- Installing symfony/yaml (v5.0.8): Downloading (100%)
- Installing symfony/finder (v5.0.8): Downloading (100%)
- Installing doctrine/annotations (1.10.2): Downloading (100%)
- Installing zircote/swagger-php (3.0.4): Downloading (100%)
symfony/yaml suggests installing symfony/console (For validating YAML files using the lint command)
3 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Removing intermediate container e08f6cf0fd92
---> db2db0c4240b
Step 8/11 : COPY swagger .
---> 04936a4370a0
Step 9/11 : COPY api/controllers controllers
---> d996bb813094
Step 10/11 : EXPOSE 80
---> Running in 82abb1153d51
Removing intermediate container 82abb1153d51
---> d2be0a04a504
Step 11/11 : CMD php -S 0.0.0.0:80
---> Running in 73e3d941ec27
Removing intermediate container 73e3d941ec27
---> 1a4ae5218579

Successfully built 1a4ae5218579
Successfully tagged apogo3_swagger:latest

如您所见,它构建良好,并且我什至尝试在 RUN composer install --no-scripts --no-autoloader命令之后执行ssh的每一步,以查看供应商文件夹何时消失,但没有运气。在Dockerfile构建过程中,它在任何时候都不会消失,这让我质疑 docker-compose.yml文件,尤其是在 volumes部分。我是Docker的新手,我可能误会了一些东西。

我想要的是

...首先是能够构建它并在构建过程完成后保留vendor文件夹。其次,我希望将生成的供应商文件夹保存在主机或容器中,以防止构建时间过长。

我想我很亲密,任何事情都非常感谢!

最佳答案

您可以从volumes:文件中删除所有docker-compose.yml
volumes:是在容器启动时进行的单向“推送”:它们始终从主机目录或命名卷中获取内容,并用其替换镜像中的数据。 (在一种特殊情况下,首次使用命名卷时,该卷会预先加载镜像中的数据,但我不会依赖于此:Docker永远不会更新卷内容,因为它可能包含用户数据,并且这不适用于Kubernetes等集群环境。)

在您的设置中,您需要几个主机目录,并使用这些目录隐藏图像中的内容。特别是,您要从主机获取空的vendor目录,并在图像中隐藏vendor目录。 (它不是命名卷,因此“在首次使用时填充卷”规则不适用。)

您需要的所有内容都已经在正确位置的图像中,因此您实际上根本不需要volumes:。这还具有使镜像完全独立的优势:如果需要在其他系统上运行它,则可以将其docker push到注册表中,并可以从远程系统docker run对其进行编码,而无需单独的应用程序代码副本。 (同样,这在像Kubernetes这样的集群环境中基本上是必需的。)

关于docker - dockerfile完成构建后,供应商文件夹消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61984330/

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