Местоположение по умолчанию контейнера изображения - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь запустить команду Docker ниже:

docker run -it --net container:some-mongo nicolaka/netshoot tcpdump -qns 0 -X -r mypcap.pcap

Ошибка DOS, которую я получаю: «mypcap.pcap: нет такого файла или каталога». Если я запускаю эту команду, то она работает как положено:

docker run -it --net container:some-mongo nicolaka/netshoot tcpdump

Какое местоположение пути ищет Docker: mypcap.pcap?

Я пробовал docker inspect some-mongo, однако это просто говорит мне об относительных путях.

Я также пытался найти это в Google, однако мои исследования показывают, что Docker может хранить изображения и контейнеры в разных местах.

Как мне найти путь, по которому смотрит tcpdump?

Это контейнер Linux на хосте Windows.

Ответы [ 3 ]

0 голосов
/ 06 мая 2019

Если вы запустите команду таким образом, она будет искать ее в «/». Но вы можете указать любой путь, указав полный путь.

Вы также должны отобразить файл mpcap:

docker run -it --net container:some-mongo \
-v $(pwd)/mypcap.pcap:/mypcap.pcap \
nicolaka/netshoot \
tcpdump -qns 0 -X -r mypcap.pcap

или в 1 строке:

docker run -it --net container:some-mongo -v $(pwd)/mypcap.pcap:/mypcap.pcap nicolaka/netshoot tcpdump -qns 0 -X -r mypcap.pcap

Это отображает его из локального каталога.

0 голосов
/ 06 мая 2019

Чтобы ответить на ваш точный вопрос, мы можем видеть при проверке вашего изображения (docker inspect nicolaka/netshoot:latest), что WorkingDir не определено. В этом случае dir по умолчанию равен / (см. Что такое WORKDIR по умолчанию в Docker? ). Но вы должны понимать, что это каталог внутри работающего контейнера , а не каталог на вашем хост-компьютере .

Обратите внимание, что команда, которую вы использовали (т. Е. docker inspect some-mongo), не проверяет ваше фактическое изображение / контейнер, а ту, которую вы выбрали в качестве базы для подключения к вашей сети.

Если я правильно понимаю, ваш файл находится в вашем текущем каталоге в локальной командной строке. Чтобы сделать то, что вы хотите, вам нужно сделать файл mypcap.pcap доступным для вашего контейнера.

Есть два основных способа сделать это в зависимости от ваших требований.

Создание расширенного изображения

Идея состоит в том, чтобы расширить базовое изображение, скопировав в него файл. Для этого вам понадобится Dockerfile

FROM nicolaka/netshoot:latest
COPY mypcap.pcap .

Затем создайте изображение

docker build . -t myextendedimage:mytag

И запустить контейнер на основе нового образа

docker run -it --net container:some-mongo myextendedimage:mytag tcpdump -qns 0 -X -r mypcap.pcap

Bind смонтировать файл в вашем контейнере

В вашей ситуации это, вероятно, будет моим предпочтительным вариантом. Предполагая, что ваш файл pcap находится в C:\tmp\mypcap.pcap

docker run -it --net container:some-mongo -v C:\tmp\mypcap.pcap:/mypcap.pcap nicolaka/netshoot tcpdump -qns 0 -X -r mypcap.pcap

Обратите внимание, что вы можете смонтировать этот файл в образ где угодно:

docker run -it --net container:some-mongo -v C:\tmp\mypcap.pcap:/my/random/dir/mypcap.pcap nicolaka/netshoot tcpdump -qns 0 -X -r mypcap.pcap
0 голосов
/ 06 мая 2019

Местоположение искомого пути указывается WORKDIR.
По умолчанию /.
WORKDIR указывается в Dockerfile.

документы

Дополнение

Если mypcap.pcap существует в контейнере some-mongo, он будет иметь видследует.

# e.g. Prerequisites /tmp/mypcap.pcap exists in some-mongo
# copy to host machine.
docker cp some-mongo:/tmp/mypcap.pcap C:¥tmp¥mypcap.pcap 
# mount mypcap.pcap directory.
docker run -it -v C:¥tmp:/opt/tcpdump nicolaka/netshoot tcpdump -qns 0 -X -r /opt/tcpdump/mypcap.pcap
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...