mr.*_*ris 6 php laravel docker dockerfile docker-compose
我想在安装过程中将所有文件复制到docker-compose.yml文件中。
如果我运行:
$ git clone https://github.com/laravel/laravel.git laravel-app
$ cd laravel-app
$ docker run --rm -v $(pwd):/app composer install
Run Code Online (Sandbox Code Playgroud)
它将在 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
Run Code Online (Sandbox Code Playgroud)
然后在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!
Run Code Online (Sandbox Code Playgroud)
它不会将vendor文件夹和composer.lock文件复制回我的主机。
热到让它发生?
您将所有构建上下文复制到图像中/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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11257 次 |
| 最近记录: |