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

时间:2020-04-16 22:45:51

标签: php laravel docker docker-compose dockerfile

我想在安装过程中将所有文件复制到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文件复制回我的主机。

热衷于实现吗?

2 个答案:

答案 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,因此vendorcomposer.lock仅存在于映像中,而不存在于主机中

  • 您将当前目录(具有composer.json但没有vendorcomposer.lock的目录绑定到/var/www,因此它将替换映像{{1} }

您知道您的问题,解决方法取决于您要确切执行的操作,请在评论中告诉我。

提示:您应该使用Docker多阶段构建将Composer安装到映像中。比/var/www

更干净
curl