我想在安装过程中将所有文件复制到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容器中将所有新文件从容器复制到主机。
因此,安装后,我将在vendor
目录中看到新的composer.lock
文件夹和laravel-app
文件。
但是如果我在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
文件复制回我的主机。
热衷于实现吗?
答案 0 :(得分:2)
如何将composer docker映像添加到docker compose并运行命令install
version: '3'
services:
#PHP Service
#your php image
# composer
composer:
image: composer/composer
volumes:
- ./:/var/www
command: install
答案 1 :(得分:1)
您将所有构建上下文复制到映像/var/www
您从映像中运行composer install
,因此vendor
和composer.lock
仅存在于映像中,而不存在于主机中
您将当前目录(具有composer.json
但没有vendor
和composer.lock
的目录绑定到/var/www
,因此它将替换映像{{1} }
您知道您的问题,解决方法取决于您要确切执行的操作,请在评论中告诉我。
提示:您应该使用Docker多阶段构建将Composer安装到映像中。比/var/www
curl