【问题标题】:How to bash into a docker container如何 bash 进入 docker 容器
【发布时间】:2020-02-06 18:00:03
【问题描述】:

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

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

【问题讨论】:

  • 要 bash 进入容器,您需要以交互方式运行映像 docker run -it <image> bash。这将允许您查看和编辑内容
  • 前提是 bash 存在于 docker 镜像中...
  • 所以我看到 leofcardoso/pdf2pdfocr 使用的基本图像是 ubuntu 18.04 所以 bash 应该可以工作
  • 您可以将 bash 替换为任何已安装的 shell (/bin/sh)。该帖子明确指出How to bash...我猜它已安装。
  • 你试过docker run -it --entrypoint /bin/bash <image>

标签: bash docker ubuntu


【解决方案1】:

首先,您没有在 docker run 命令中分配 tty,并且 docker 容器在 converting files 之后很快就死掉了。这是容器的主要过程

#!/bin/bash

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

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

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

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

但是容器在完成转换后会死掉。

【讨论】:

    【解决方案2】:

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

    查看 docker 容器 id

    docker container ls 
    

    在容器内输入 bash。

    docker exec -it CONTAINER_ID bash
    

    【讨论】:

    • 实际上这在这种情况下不起作用。您应该有一个始终运行的容器才能进入其中,但该容器计划用作快速执行容器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2017-09-11
    • 2018-09-14
    相关资源
    最近更新 更多