【问题标题】:Binary executable for changing directory-docker用于更改目录的二进制可执行文件-docker
【发布时间】:2015-07-23 13:48:19
【问题描述】:

我需要在 docker 容器中运行一些 cmets

docker exec -i -t mycontainer cd /root/myfolder

这表明

exec: "cd": executable file not found in $PATH

所以 cd 不是二进制可执行文件,而是作为 shell 内置实现的

是否有任何替代“cd”的方法可以将目录更改为可执行文件,或者有没有其他方法可以使用 docker 执行更改目录命令?

【问题讨论】:

    标签: docker exec cd


    【解决方案1】:

    您使用什么作为容器的基础映像? cd 通常不是 bashsh 内置命令,而是它自己的命令。您是否也尝试过提供cd 命令的完整路径(如/usr/bin/cd)?顺便说一句,这个命令本身没有任何意义。它将在容器环境中执行cd,然后结束。然后,您更改到该目录的信息将丢失。

    【讨论】:

    • 我需要运行容器内的脚本,所以我需要将目录(比如 /root/myfolder)更改为包含脚本的目录,然后运行它。不要告诉我通过运行 source /root/myfolder/myscript.sh 来运行脚本,因为脚本已经有一些相对路径信息。希望你理解我的情况..
    • 在这种情况下,您可以执行以下操作:docker exec -it mycontainer /bin/sh -c "/usr/bin/cd /root/myfolder && ./script.sh"
    • 那个文件夹存在吗?你验证了吗?您仍然没有提供有关您用作基本图像的信息。当我使用运行良好的官方 ubuntu 映像进行此简单测试时:docker run -it ubuntu sh -c "cd /root && pwd"
    • 我的基础镜像是 symdrive。你可能不熟悉。我可以运行 docker exec -i -t mycontainer /bin/bash 然后运行 ​​cd /root/myfolder 并运行 ./myscript.sh用手。所以目录存在那里。
    • 好的。在您的问题中,您写道 cd 是作为 shell 插件内置的。我确实不知道symdrive。但是假设您使用的/bin/bash 知道cd,并且假设您的bash 具有标准的-c 选项,那么下面的调用呢:docker exec -it mycontainer /bin/bash -c "cd /root/myfolder && ./myscript.sh"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2010-09-10
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多