Я запускаю докер в контейнере, используя следующую команду:
docker run --rm -ti --privileged -v /var/run/docker.sock:/var/run/docker.sock docker:1.12 sh
Внутри оболочки этого контейнера я вижу каталог с кучей файлов. Скажем /project
с файломbuild.gradle
. Я хочу запустить новый контейнер и смонтировать этот каталог, используя команду ниже
docker run -ti --rm -v /project:/project openjdk:8-jdk bash -c "ls /project"
.
Однако похоже, что каталог проекта пуст, ls /project
не показывает никаких файлов ..
Теперь пытаемся смонтировать файл:
docker run -ti --rm -v /project/build.gradle:/project/build.gradle openjdk:8-jdk bash -c "ls /project/"
На этот раз в папке отображается файл.
Всем, кто знает, почему крепление тома не работает должным образом. Это проблема с разрешением?
Нет. Внутри контейнера «docker» вы получаете только клиент Docker, а не все это целиком. После того, как вы смонтируете сокет Docker внутри своего «docker» контейнера, когда вы выполните команды Docker, они направятся прямо на «сервер» Docker, работающий на вашем фактическом хосте Docker. Таким образом, эта папка должна существовать на вашем хосте Docker.
Пример того, как смонтировать том с помощью докера в докере:
host$ pwd
/var/my-project
host$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $PWD:/app docker -it sh
/ # ls -l /app ### inside first docker
<LIST OF PROJECT FILES>
/ # docker run -v /var/my-project:/inception docker sh ### you need to pass HOST directory NOT currently running (/app) container directory
/ # ls -l /inception ### inside second docker
<LIST OF PROJECT FILES>