我正在尝试运行普通的bash脚本,以从容器中运行工具并将其输出提取到主机。这就是我到目前为止(课程的脚本本身):
docker build -t amass https://github.com/OWASP/Amass.git
docker run -d --name amass_dock amass
docker exec -it amass_dock sh -c "./bin/amass --passive -d example.com -o out.txt"
docker cp amass_dock:/out.txt .
这将发出错误:“无法在停止状态下执行”。 执行此操作的正确方法是什么?我的目标是最终运行docker程序并将输出输出到主机。
答案 0 :(得分:1)
最简单的操作是read the manual :),然后像这样运行它:
docker build -t amass https://github.com/OWASP/Amass.git
# Note that out.txt will be created on your host, not within the container
docker run amass --passive -d example.com > out.txt
cat out.txt
PS:为方便起见,您可能希望将包装器脚本放置在主机系统上,如下所示:
#!/bin/bash
# /usr/local/bin/amass
docker run amass "$@"
使其可执行:
chmod +x /usr/local/bin/amass
现在,您可以运行amass
,并在脚本中使用它,就像将其安装在主机系统上一样:
amass --passive -d example.com
答案 1 :(得分:0)
如果您程序的主要目标是读写本地文件,请考虑不要在Docker中运行它。这完全避免了您遇到的容器生命周期和文件系统映射问题。
sudo apt install snapd
sudo systemctl start snapd
sudo snap install amass
./bin/amass --passive -d example.com -o out.txt
否则,Docker容器具有自己的独立文件系统,并且需要显式地授予对主机系统文件的访问权限。请参阅bind mounts上的Docker文档。您可以像这样运行该程序
sudo docker build -t amass https://github.com/OWASP/Amass.git
sudo docker run --rm -v $PWD:/data \
amass --passive -d example.com -o /data/out.txt
cat out.txt
请注意,您可以在docker run -v
选项中指定 any 主机目录,甚至是/etc
和/bin
之类的系统目录,因此我显式地调出需要与root用户等效的权限的步骤(docker
组中的成员资格等同于拥有root用户)。还要注意,没有Docker的用户可以以普通用户身份运行该工具,但是要运行Docker容器,您必须有效地是root用户。
如果您的问题是容器正在退出(“ ...处于停止状态”),那么第一步应该是查看docker logs
并在没有{{1}的情况下在前台运行容器}选项以了解原因。尽管-d
是有用的调试工具,但它并不是与容器进行交互的主要方式。