Подтвердить что ты не робот

Копирование файлов в контейнер с помощью Docker Compose

У меня есть Dockerfile, где я копирую существующий каталог (с содержимым) в контейнер, который отлично работает:

Dockerfile

FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/

RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html 
RUN chmod -R 755 /var/www/html 

Снимок экрана с каталогом с помощью docker exec

Но когда я использую файл docker-compose.yml, есть только каталог aw3somevideo и внутри aw3somevideo ничего.

Докер-compose.yml:

 php:
    build: php/
    volumes:
      - ./Frontend/ :/var/www/html/
      - ./Frontend/index.php :/var/www/html/
    ports:
      - 8100:80

Снимок экрана с пустым списком каталогов

Может быть, я не понимаю функцию volumes, и если это произойдет, скажите мне, как скопировать мои существующие файлы в контейнер через файл docker-compose.yml.

4b9b3361

Ответ 1

Обновлено апрель 2017 года

Поведение изменилось с тех пор, как я написал исходный ответ. Теперь согласуется, указывает ли правая сторона именованного тома как myvolume или путь на хосте, например /var/lib/myapp. Например,

    volumes:
      - /dir/on/host:/var/www/html

если /dir/on/host не существует, он создается на хосте, а пустой контент монтируется в контейнере в /var/www/html. Все, что было в /var/www/html до этого, недоступно.

---- старый ответ -----------

Раздел volumes: в вашей компоновке docker перезаписывает все, что находится в каталоге /var/www/html.

Существуют две ситуации:

  • Объем существует

    В этом случае содержимое тома затеняет все, что находится в каталоге dst.

    Например:

    volumes:
      - /dir/on/host:/var/www/html
    
  • Объем не существует

    Если myvolume не существует (например, именованный том), содержимое /var/www/html будет скопировано в том в первый раз

    volumes:
      - myvolume:/var/www/html
    

В случае 2, если вы попытаетесь снова установить тот же объем на каком-либо контейнере, он будет следовать за случаем 1.

    volumes:
      - myvolume:/var/www/html

В этом случае (при условии, что myvolume уже был создан) содержимое /var/ww/html будет перезаписано (затенено) тем, что находится в myvolume.

Официальный документ подробно рассматривается https://docs.docker.com/compose/compose-file/#/volumes-volume-driver