容器图片的默认位置

时间:2019-05-06 08:17:42

标签: docker

我正在尝试运行以下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,但这只是告诉我相对路径。

我也尝试过谷歌搜索,但是我的研究告诉我Docker可以在很多不同的地方存储图像和容器。

如何找到tcpdump正在查看的路径?

它是Windows主机上的Linux容器。

3 个答案:

答案 0 :(得分:0)

查找路径位置由WORKDIR指定。
默认值为session_write_close()
在Dockerfile中指定了WORKDIR。

文档

补充

如果/容器中存在mypcap.pcap,它将如下所示。

some-mongo

答案 1 :(得分:0)

如果以这种方式运行命令,它将在“ /”中查找它。但是,您可以通过指定完整路径来为其指定任何路径。

您还应该映射mpcap文件:

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

或一行:

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

这将从本地目录映射它。

答案 2 :(得分:0)

要回答您的确切问题,我们可以在检查图像(docker inspect nicolaka/netshoot:latest)时看到未定义WorkingDir。在这种情况下,默认目录为/(请参见What's the default WORKDIR in 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

将文件挂载到容器中

在您的情况下,这可能是我的首选。假设您的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