Как смонтировать каталог внутри контейнера докеров на хосте Linux

Я хотел бы смонтировать каталог из контейнера докеров в локальную файловую систему. каталог является корнем веб-сайта, и мне нужно иметь возможность редактировать его на своем локальном компьютере с помощью любого редактора.

Я знаю, что могу запустить docker run -v local_path:container_path, но при этом создается только пустой каталог внутри контейнера.

Как смонтировать каталог внутри контейнера докеров на хосте Linux?


person Antonio Pedicini    schedule 14.10.2016    source источник
comment
Вы читали это stackoverflow.com/a/31726568/1981061?   -  person Griffin    schedule 14.10.2016
comment
спасибо, как бы вы предложили использовать тома, чтобы предоставить разработчикам готовую к использованию среду стека ламп, чтобы они могли использовать свой собственный компьютер со своими любимыми редакторами и инструментами?   -  person Antonio Pedicini    schedule 14.10.2016
comment
Попробуйте сделать это наоборот. Смонтируйте исходный каталог внутри контейнера. Используйте свой редактор, создавайте, выполняйте из смонтированного каталога внутри вашего контейнера. Другой способ - смонтировать каталог на хосте и скопировать из контейнера исходный код в смонтированный каталог, чтобы он был доступен с хоста для вашего редактора.   -  person Griffin    schedule 14.10.2016
comment
Я не понимаю людей, которые посвящают себя распространению негативных моментов на вопросы и ответы. Этот вопрос не только совершенно актуален, но и отсутствует в докере. Вы должны иметь возможность монтировать именованный том на своем хосте. Он уже есть в файловой системе, но если вы туда запишете, изменения не отразятся в контейнере   -  person Carlos Rafael Ramirez    schedule 14.10.2016
comment
Возможный дубликат смонтировать каталог в контейнере и поделиться с хостом   -  person jww    schedule 10.06.2018


Ответы (2)


Если ваша цель — предоставить готовый к работе LAMP, вам следует использовать объявление VOLUMES внутри Dockerfile. VOLUME volume_path_in_container Проблема в том, что docker не смонтирует файл, потому что он уже присутствовал в пути, на котором вы создаете том. Вы можете пойти, как сказал @Grif-fin в своем комментарии, или изменить точку входа контейнера, чтобы он скопировал файл, который вы хотите открыть для тома во время выполнения.

Вы должны вставить свои данные с помощью команды build COPY или ADD в Dockerfile, чтобы базовые файлы присутствовали в контейнере.

Затем создайте точку входа, которая скопирует файл из пути COPY в путь тома.

Затем запустите контейнер, используя тег -v и например -v local_path:volume_path_in_container. Таким образом, у вас должны быть файлы внутри контейнера, смонтированные на локальном компьютере. (По крайней мере, это было то, что я добавляю).

Найдите пример здесь: https://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp.

Это позволит избежать необходимости сборки каждый раз, и вы можете предоставить его из окончательного образа.

Чтобы быть лучше, было бы неплохо добавить поддержку пользователей, чтобы вы были владельцем смонтированных файлов (если вы не root).

Надеюсь, это было полезно для вас.

person Titouan Freville    schedule 14.10.2016

Это немного странно, но для этого вы можете использовать именованные тома. Несмотря на смонтированные на хосте тома, именованные не будут очищены. И вы можете получить доступ к каталогу. См. пример:

docker volume create --name data
docker run -rm=true -v data:/etc ubuntu:trusty
docker volume inspect data

[
    {
        "Name": "data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/data/_data",
        "Labels": {},
        "Scope": "local"
    }
]

Видите точку монтирования?

mkdir ~/data
sudo -s
cp -r /var/lib/docker/volumes/data/_data/* ~/data
echo "Hello World">~/data/hello.txt

docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/fstab  #The content is preserved
docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/hello.txt  #And your changes too

Это не совсем то, о чем вы просили, но зависит от ваших потребностей, это работает

С Уважением

person Carlos Rafael Ramirez    schedule 14.10.2016