Docker на windows может монтировать папку для nginx контейнера, но не для Ubuntu - PullRequest
0 голосов
/ 28 февраля 2020

Я создаю образ из этого docker файла для NGinx

FROM nginx
COPY html /usr/share/nginx/html

Затем я запускаю контейнер с помощью этой команды

docker run -v /C/nginx/html:/usr/share/nginx/html -p 8081:80 -d --name cntr-mynginx mynginx:abc

Это работает, и я могу смонтировать папку, и изменения, сделанные в папке html на хосте, можно увидеть в файловой системе контейнера. Изменения, внесенные в файловую систему контейнера в папке /usr/share/nginx/html, также видны на хосте.

Почему то же самое не работает, когда я использую базу Ubuntu? Это файл docker для контейнера Ubuntu, который я пытаюсь раскрутить.

FROM ubuntu:18.04
COPY html /home

Я использовал эту команду для его запуска

docker run -v /C/ubuntu-only/html:/home -p 8083:8080  --name cntr-ubuntu img-ubuntu:abc

Команда выше запускается и когда я сделайте docker ps -a, я вижу, что контейнер остановился сразу после запуска.

Я удалил копию html и сделал образ Ubuntu еще меньше, сохранив только первую строку FROM ubuntu:18.04 и даже тогда я получаю тот же результат. Контейнер вышел практически сразу, как только начался. Любая идея, почему это работает для NGINX, но не для Ubuntu и что мне нужно сделать, чтобы это работало?

1 Ответ

0 голосов
/ 28 февраля 2020

Проблема, с которой вы столкнулись, не связана с монтированием каталога в ваш контейнер.

Приведенная выше команда запускается, и когда я выполняю docker ps -a, я вижу, что Контейнер остановился сразу после запуска.

Контейнер завершается из-за того, что не указан процесс для его запуска.

В случае NGINX, вы можете видеть, что инструкция CMD установлена ​​в конце файла Docker.

CMD ["nginx", "-g", "daemon off;"]

Это запускает NGINX как процесс переднего плана и предотвращает немедленный выход контейнера.

Ubuntu Dockerfile отличается тем, что в качестве команды, которую контейнер будет запускать при запуске, определяет bash.

CMD ["/bin/bash"]

Поскольку bash не запускается как здесь процесс переднего плана, контейнер немедленно завершается.

Попробуйте добавить в команду docker run процесс, который остается на переднем плане, например sleep.

docker run -v /C/ubuntu-only/html:/home -p 8083:8080  --name cntr-ubuntu img-ubuntu:abc sleep 9000

Если вы запустите docker exec -it cntr-ubuntu /bin/bash ты должен оказаться в на стороне контейнера и убедитесь, что смонтированный каталог присутствует.

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