Docker: docker -создание копии файлов из контейнера на хост - PullRequest
1 голос
/ 17 апреля 2020

Я хочу скопировать все файлы во время процесса установки в файл 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 ]

1 голос
/ 17 апреля 2020

как насчет добавления composer docker образа к вашему docker compose и запускаю команду install

version: '3'
services:
    #PHP Service
    #your php image

    # composer
    composer:
      image: composer/composer
      volumes:
        - ./:/var/www
      command: install
1 голос
/ 17 апреля 2020
  • Вы копируете весь контекст сборки в ваше изображение /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
...