Невозможно смонтировать тома на докер-машину с хоста ubuntu 18.04 - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь докеризировать приложение React на хосте Ubuntu 18.04 до гостевого узла 12. Я следую этому руководству https://mherman.org/blog/dockerizing-a-react-app/ и все работает нормально, пока не доберусь до монтирования томов на докер-машину. После монтирования тома целевая папка в гостевой системе пуста или даже удаляет существующие файлы, уже смонтированные в образе.

Ниже приводится мой Dockerfile:

# base image
FROM node:12.2.0-alpine
RUN apk add --no-cache git

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY ./package.json /app/package.json
RUN npm install --silent
RUN npm install react-scripts@3.0.1 -g --silent

# start app
CMD ["npm", "start"]

создайте докер-машину и настройте оболочку для подключения к ней:

docker-machine create -d virtualbox lz-front
eval $(docker-machine env lz-front)

Смонтируйте корневую папку проекта

sanka@ThinkPad-P1:~/code/lz/lz-new$ VBoxManage sharedfolder add lz-front --name lz-new --hostpath /home/sanka/code/lz/lz-new/ --automount

Построить изображение

sanka@ThinkPad-P1:~/code/lz/lz-new$ docker build -t lz:dev .

Проверка того, что внутри, показывает, что все как и ожидалось:

sanka@ThinkPad-P1:~/code/lz/lz-new$ docker run -it --rm lz:dev sh
/app # ls
node_modules       package-lock.json  package.json
/app # 

Но после монтирования томов целевая папка содержит только node_modules

sanka@ThinkPad-P1:~/code/lz/lz-new$ docker run -v ${PWD}:/app -v /app/node_modules -p 3001:3000 -it --rm lz:dev sh
/app # ls
node_modules
/app # 

Если я запускаю команду run за пределами док-машины, приложение запускается нормально. Поэтому я подозреваю, что автоматическое монтирование VirtualBox не работает для меня.

EDIT: показывает содержимое рабочего каталога

sanka@ThinkPad-P1:~/code/lz/lz-new$ ls
config-overrides.js  Dockerfile    package.json  README.md  test
docker-compose.yml   node_modules  public        src

РЕДАКТИРОВАТЬ 2: После входа в Docker-машину с помощью SSH, я могу проверить, что автоматическая установка общей папки работает так, как они присутствуют в VM

sanka@ThinkPad-P1:~/code/lz/lz-new$ docker-machine ssh lz-front
docker@lz-front:~$ ls /
bin       home      lib       lz-new    proc      sbin      usr
dev       hosthome  lib64     mnt       root      sys       var
etc       init      linuxrc   opt       run       tmp

1 Ответ

1 голос
/ 21 мая 2019

Изменение команды VBoxManage на:

sanka@ThinkPad-P1:~/code/lz/lz-new$ VBoxManage sharedfolder add lz-front --name ${PWD} --hostpath ${PWD} --automount

решает проблему.Я думаю, что тома монтируются из папки пользователей виртуальной машины, а не напрямую из папки хоста.Эта папка пуста во время выполнения запуска Docker.Монтирование каталога в требуемое место на виртуальной машине перед выполнением запуска докера позволяет правильно подключиться.

...