繁体   English   中英

Docker:docker-compose 将文件从容器复制到主机

[英]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 ,因此vendorcomposer.lock仅存在于映像中,而不存在于您的主机上

  • 您将挂载当前目录(具有composer.json但没有vendorcomposer.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM