如何猛击 docker 容器

Dan*_*wes 8 bash ubuntu docker

尝试 bash 进入容器并执行 for 循环,该循环仅执行一个命令(顺便说一下,该命令适用于单个文件)。它甚至似乎呼应了正确的命令......我忘记了什么无题

for pdf in *.pdf ;
do 
 docker run --rm -v "$(pwd):/home/docker" leofcardoso/pdf2pdfocr -g jpeg2000 -v -i '\'''$pdf''\''';
done
Run Code Online (Sandbox Code Playgroud)

小智 14

您可以使用以下命令在容器中进行 bash:

查看 docker 容器 ID

docker container ls 
Run Code Online (Sandbox Code Playgroud)

在容器内输入 bash。

docker exec -it CONTAINER_ID bash
Run Code Online (Sandbox Code Playgroud)

  • 实际上这在这种情况下不起作用。您应该有一个始终运行的容器才能进入其中,但该容器计划用作快速执行容器。 (2认同)

Adi*_*iii 6

首先,您没有tty在 docker run 命令中进行分配,并且 docker 容器在转换文件后很快就会终止。这是容器的主要流程

#!/bin/bash

cd /home/docker
exec pdf2pdfocr.py "$@"
Run Code Online (Sandbox Code Playgroud)

所以,在这种情况下,这个容器的寿命就是exec pdf2pdfocr.py "$@"命令的寿命。

正如@Fra 所提到的,覆盖入口点并手动运行命令。

docker run --rm -v "$(pwd):/home/docker" -it --entrypoint /bin/bash leofcardoso/pdf2pdfocr
Run Code Online (Sandbox Code Playgroud)

但在上面的运行命令中,docker容器不会做任何事情,只会分配tty并且bash将打开。因此,您可以使用 docker exec 转换容器内的文件,然后运行pdf2pdfocr.py -g jpeg2000 -v -i mypdf.pdf

因此,如果您想使用覆盖入口点运行,那么您可以尝试。

docker run -it --rm --entrypoint /bin/bash -v "$(pwd):/home/docker" leofcardoso/pdf2pdfocr -c "pdf2pdfocr.py -g jpeg2000 -v -i mypdf.pdf"
Run Code Online (Sandbox Code Playgroud)

或使用 bash 脚本

#!/bin/bash
for pdf in *.pdf ;
do
 echo "converting $pdf" 
 docker run -it --rm --entrypoint /bin/bash -v "$(pwd):/home/docker" leofcardoso/pdf2pdfocr -c "pdf2pdfocr.py -g jpeg2000 -v -i  $pdf"
done

Run Code Online (Sandbox Code Playgroud)

但完成转换后容器就会消亡。