我正在尝试运行以下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容器。
答案 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