Я новичок в докере, и я пытаюсь смонтировать корневой каталог контейнера докера в качестве точки монтирования NFS. например, у меня была точка монтирования NFS test:/home/user/3243, и я пытаюсь:

docker run -it -v "test:/home/user/3243":/ centos7 /bin/bash

Абсолютно, это не удалось. Итак, я попробовал это:

mount -t nfs test:/home/user/3243 /mnt/nfs/3243
docker run -it -v /mnt/nfs/3243:/ centos7 /bin/bash

Но снова не удалось, так как это сделать? Можно ли это решить?

1
Guy 16 Окт 2015 в 09:49

2 ответа

Лучший ответ

Здесь пара вопросов:

  1. Вы не можете подключиться к корневому каталогу контейнера. Так что docker run -v /foo:/ никогда не сработает.

  2. С синтаксисом вашей первой попытки, -v test:/foo:bar, Docker будет рассматривать это как желание создать «именованный» том с именем «test».

Вы должны быть в состоянии сначала выполнить монтирование NFS, а затем выполнить docker run -v /mnt/nfs/3243:/foo, чтобы смонтировать путь nfs к /foo. Но опять же, вы не можете подняться на /.

3
cpuguy83 16 Окт 2015 в 15:02

В настоящее время это обсуждается (с середины 2014 года) в проблеме 4213.

Один из недавних обходных путей, сделанный Йеруном ван Беммелем (jbemmel):

Похоже, что функциональность NFS зависит от базового драйвера хранилища (aufs, devicemapper и т. Д.), А также от совместного использования дескрипторов файлов между процессами (см. Сообщение в блоге "docker: devicemapper исправление для« устройство или ресурс занят »({{X1} }) ") то есть 'unshare' может повлиять на монтирование NFS.

Я отказался от использования 'MOUNTPOINT=/vm/nfs', поскольку не уверен, генерируется ли это событие вообще.
Вместо этого я создал такой файл upstart:

cat > /etc/init/ecdn.conf << EOF
description "eCDN container"
author "Jeroen van Bemmel"
# mounted MOUNTPOINT=/vm/nfs doesn't seem to work, at least not the first time
start on started docker and virtual-filesystems
stop on starting rc RUNLEVEL=[016]
respawn
script
exec /usr/bin/docker start -a ecdn
end script

pre-stop script
/usr/bin/docker stop ecdn
# dont /usr/bin/docker rm ecdn
end script

EOF

а затем создайте контейнер следующим образом:

script -c "docker create -it --name='ecdn' --volume /vm:/usr/share/nginx/html/vm:ro image/name"
0
Community 20 Июн 2020 в 09:12