如何进入 Docker 容器?

20

尝试进入容器并执行一个仅对单个文件有效的命令的 for 循环。它甚至似乎回显了正确的命令...我忘记了什么

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

2
要进入容器,您需要交互式地运行镜像 docker run -it <image> bash。这将允许您查看和编辑内容。 - fra
只要 Docker 镜像中存在 Bash ... - Soumen Mukherjee
我看到leofcardoso/pdf2pdfocr使用的基础镜像是ubuntu 18.04,所以bash应该可以正常工作。 - Soumen Mukherjee
你可以用任何已安装的shell(/bin/sh)替换bash。文章明确说明了“如何使用bash...”,我猜它已经被安装了。 - fra
不行,这个镜像有一个ENTRYPOINT指令,它强制每个命令都作为参数传递给/opt/install/docker-wrapper.sh。请参考https://github.com/LeoFCardoso/pdf2pdfocr/blob/master/Dockerfile。 - Stefano
1
你尝试过执行 docker run -it --entrypoint /bin/bash <image> 命令吗? - fra
2个回答

45
你可以使用以下命令在容器中运行bash:
要查看Docker容器的ID,可以执行以下命令:
docker container ls 

进入容器内的Bash终端。

docker exec -it CONTAINER_ID bash

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

6

首先,在docker run命令中没有分配tty,因此docker容器在转换文件后很快就会死亡。以下是容器的主要进程

#!/bin/bash

cd /home/docker
exec pdf2pdfocr.py "$@"

因此,在这种情况下,该容器的寿命就是exec pdf2pdfocr.py "$@"命令的寿命。

如@Fra所提到的,覆盖entrypoint并手动运行命令。

docker run --rm -v "$(pwd):/home/docker" -it --entrypoint /bin/bash leofcardoso/pdf2pdfocr

然而,在上述运行命令中,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"

或者使用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

但是容器在完成转换后将会停止运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接