Docker / Docker-сочинять тома заполнить и поделиться проблемой - PullRequest
0 голосов
/ 08 января 2019

У меня есть несколько вопросов о томах Docker. Я установил Docker и docker-compose на свежий хост, на котором запущен Debian Stretch. Мне удалось запустить файл docker-compose для простого проекта nginx / php-fpm, оба контейнера были смонтированы в каталоге, содержащем исходный код. Я хотел попытаться создать один том, который будет использоваться в моих контейнерах, но у меня есть несколько проблем, и мое понимание официальной документации не помогает.

Итак, это идея того, чего я пытаюсь достичь:

enter image description here

Вопрос 1. Попытка создать том из файла Docker в каталоге, смонтированном с хоста

docker-compose.yml:

version: '3'
services:
    php:
        build:
            context: .
            dockerfile: php.dockerfile
        volumes:
            - ./host-project-directory:/project

php.dockerfile:

FROM php:7-fpm
VOLUME project

Насколько я понимаю, при запуске docker-compose на хосте должен быть создан том, содержащий все файлы из / project из контейнера. И / project из контейнера должен содержать все файлы из ./host-project-directory с хоста. Если я вижу содержимое / project в контейнере, я могу видеть файлы с хоста, но используя список томов docker , тома не создаются на хосте, почему?

Вопрос 2: Как заполнить и использовать этот том из другого контейнера?

version: '3'
services:
    php:
        build:
            context: .
            dockerfile: php.dockerfile
        volumes:
            - named-volume:/project
    web:
        image: nginx
        links:
            - php
        volumes:
            - named-volume:/project
volumes:
    named-volume:

Это должно создать том с именем named-volume и связать его с каталогами / project в обоих контейнерах php и web . Теперь, как заполнить этот том содержимым из ./host-project-directory? Я попытался добавить файл Docker, например

ADD ./host-project-directory /project

Но ничего не изменилось и громкость осталась пустой.

Извините, если это связано с отсутствием у меня опыта использования Docker, но я не могу понять, как заставить эту простую вещь работать.

Спасибо, что уделили время!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Привязка - это не то же самое, что том . Здесь вы определяете именованный том, но вам нужна функциональность bind mount.

Попробуйте это

version: '3'
services:
    php:
        build:
            context: .
            dockerfile: php.dockerfile
        volumes:
            - ./host-project-directory:/project
    web:
        image: nginx
        links:
            - php
        volumes:
            - ./host-project-directory:/project
0 голосов
/ 08 января 2019

Для первого вопроса я попробую простой файл Docker, подобный этому:

FROM php:7-fpm
COPY ./project /project

И составь докер, как это:

version: '3'
services:
    php:
        build: .
        volumes:
            - named-volume:/project
    web:
        image: nginx
        links:
            - php
        volumes:
            - named-volume:/project
volumes:
    named-volume:

Поскольку вы создаете том в docker-compose, вам не нужно создавать его в Dockerfile. Запустив список томов Docker, я могу видеть том, созданный с помощью локального драйвера. Делая ls внутри папки, я также могу видеть файл. Важно отметить, что файл, представленный в вашем локальном каталоге, отличается от файла внутри контейнера. Поэтому, если вы редактируете файлы на хосте, это не изменит файлы в контейнере. Это потому, что ваш том создан по другому пути, вероятно, по адресу: / var / lib / docker / volume / ... Это происходит потому, что вы отображаете объем на путь, но не указываете, где вы хотите объем. Для этого просто сделайте ваш docker-compose следующим образом:

version: '3'
services:
    php:
        build: .
        volumes:
            - ./project:/project
    web:
        image: nginx
        links:
            - php
        volumes:
            - ./project:/project

Делая это, я все еще могу видеть том с помощью команды списка громкости, но без имени. Поэтому я не знаю, почему вы не можете увидеть объем в списке.

На вопрос 2:

В приведенном выше примере у меня есть файлы внутри контейнера, который существует в моей локальной папке «проект».

Пожалуйста, убедитесь, что путь к локальной папке правильный.

...