[英]Docker: docker-compose copy files from container to host
我想将安装过程中的所有文件复制到docker-compose.yml
文件中。
如果我运行:
$ git clone https://github.com/laravel/laravel.git laravel-app
$ cd laravel-app
$ docker run --rm -v $(pwd):/app composer install
它将在 docker 容器中的安装过程中将所有新文件从容器复制到主机。
所以我会在安装后在我的laravel-app
目录中看到新的vendor
文件夹和composer.lock
文件。
但是如果我在docker-compose.yml
中设置音量:
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
然后在Dockerfile
中设置安装过程:
FROM php:7.4.4-fpm
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy existing application directory contents
COPY . /var/www
# Install composer.json dependencies
RUN composer install # <<-- !this one!
它不会将vendor
文件夹和composer.lock
文件复制回我的主机。
热到让它发生?
如何将 composer docker 图像添加到您的 docker compose 中,然后运行命令安装
version: '3'
services:
#PHP Service
#your php image
# composer
composer:
image: composer/composer
volumes:
- ./:/var/www
command: install
您将所有构建上下文复制到您的图像/var/www
您从映像运行composer install
,因此vendor
和composer.lock
仅存在于映像中,而不存在于您的主机上
您将挂载当前目录(具有composer.json
但没有vendor
和composer.lock
)绑定到/var/www
,因此它替换图像/var/www
你知道你的问题,修复取决于你想要做什么,在评论中告诉我。
提示:您应该使用 Docker 多阶段构建将 Composer 安装到您的映像中。 它比curl
干净得多
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/
RUN composer install --no-scripts --no-suggest --optimize-autoloader
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.