当前位置: 首页 > 知识库问答 >
问题:

Docker-为什么cp不能通过bash正确复制?

朱阳曜
2023-03-14

我试图运行一个普通的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程序并将输出带到主机。

共有2个答案

章高朗
2023-03-14

如果您的程序的主要目标是读写本地文件,请考虑不在Docker中运行它。这完全避免了您遇到的容器生命周期和文件系统映射问题。

sudo apt install snapd
sudo systemctl start snapd
sudo snap install amass
./bin/amass --passive -d example.com -o out.txt

否则,Docker容器有自己独立的文件系统,需要显式地授予对主机系统文件的访问权限。请参阅绑定挂载上的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选项中指定任何主机目录,甚至可以指定像/etc/bin这样的系统目录,因此,我已经明确调用了需要根等效权限的步骤(docker组中的成员资格等同于具有根)。另外请注意,如果没有Docker,您可以作为普通用户运行该工具,但是要运行Docker容器,您必须有效地成为root用户。

如果您的问题是容器正在退出(“处于停止状态”),那么第一步应该是查看docker日志,并在前台运行容器,而不使用-d选项来了解原因。虽然docker exec是一个有用的调试工具,但它并不是用来与容器交互的主要方式。

芮化
2023-03-14

最简单的方法是阅读手册:),然后像这样运行:

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

附言:为了方便起见,您可能希望在主机系统上放置一个包装脚本,如下所示:

#!/bin/bash
# /usr/local/bin/amass
docker run amass "$@"

使其可执行:

chmod +x /usr/local/bin/amass

现在,您可以运行amass,并在脚本中使用它,就像它将安装在主机系统上一样:

amass --passive -d example.com
 类似资料:
  • 问题内容: 我在MacOSX上使用Docker(带有Boot2Docker)。 我可以从Docker Hub运行映像。 但是,当我尝试像这样运行自己的映像之一时: 要么 要么 我得到: 我猜它找不到在容器中执行的bash二进制文件,但是为什么呢? 基本图像是 谢谢你的帮助。 阿什莉 问题答案: 您的图片基于不带bash外壳的busybox。它的确有外壳。 所以这不起作用: 但这确实是: 由于您的入

  • 所以,我正在为一个班级做这个作业。这是一个Java类,我应该做一个游戏,它掷两个骰子,把它们相加,然后把它们加到你的回合分数上。然后它会问你是否想继续玩下去。当你的轮次得分达到20分,或者当你决定通过时,它会进入电脑。它应该打印每个回合的分数,然后当有人得到100分时,它就会宣布胜利者。然而,不管怎样,无论我跑了多少圈,每一圈结束时的分数都是0。当一名玩家掷1时,他们的回合分数被取消,并转移到另一

  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:

  • 我认为1534236469超出范围!Leetcode:7。反向整数我无法通过测试输入1534236469。为什么?返回范围为[Integer.MAX_VALUE,Integer.MIN_VALUE],其他应返回零 谢谢你的帮助

  • 你好,谢谢你花时间处理我的问题。首先让我向你介绍我的虚拟/培训项目。下面列出的类应该代表MVC模型(模型、视图、控制器)之后的程序。运行主类时,会打开FileChooser,从中可以选择. csv-File,其中包含保存为String[][]的信息。这个String[][]然后在视图类中可视化为JTable。这个JTable是带有BorderLayout的JFrame中的JPanel的一部分。中心

  • line.FlatMap(WordSutil::GetWords)是方法引用中错误的返回类型: 编码方法: