【问题标题】:Why does Docker say it can't execute 'bash"?为什么 Docker 说它不能执行“bash”?
【发布时间】:2022-03-10 23:37:13
【问题描述】:

我在 MacOSX 上使用 Docker(带有 Boot2Docker)。

我可以从 Docker Hub 运行图像。

但是,当我尝试像这样运行自己的图像之一时:

docker run -P mylocalimage

docker run -P mylocalimage bin/a3-write-back

...

我明白了:

docker "env: can't execute 'bash': No such file or directory"

我猜它在容器中找不到要执行的 bash 二进制文件,但是为什么呢?

基础镜像是errordeveloper/oracle-jdk

感谢您的帮助。

阿什莉。

[{
    "Architecture": "amd64",
    "Author": "ABC email@email.com",
    "Checksum": "tarsum.dev+sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "Comment": "",
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": [
            "bin/a3-write-back"
        ],
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/jdk1.8.0_25/bin",
            "JAVA_HOME=/usr/jdk1.8.0_25"
        ],
        "ExposedPorts": null,
        "Hostname": "5bf0de3d0926",
        "Image": "abd65ce243a5b015bb49f3e958103a5cc0c5f14938df4e480ded25f3ecf878e7",
        "MacAddress": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": [],
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "daemon",
        "Volumes": null,
        "WorkingDir": "/opt/docker"
    },
    "Container": "987d2279b6e42195fe8e732c0637798926db6cfaeab93fcc25a3f10dac73f111",
    "ContainerConfig": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/bin/sh",
            "-c",
            "#(nop) CMD []"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": [
            "bin/a3-write-back"
        ],
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/jdk1.8.0_25/bin",
            "JAVA_HOME=/usr/jdk1.8.0_25"
        ],
        "ExposedPorts": null,
        "Hostname": "5bf0de3d0926",
        "Image": "abd65ce243a5b015bb49f3e958103a5cc0c5f14938df4e480ded25f3ecf878e7",
        "MacAddress": "",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": [],
        "OpenStdin": false,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": false,
        "User": "daemon",
        "Volumes": null,
        "WorkingDir": "/opt/docker"
    },
    "Created": "2015-01-13T05:25:38.467586784Z",
    "DockerVersion": "1.4.1",
    "Id": "ddbd5d3f52cc5fd41605c95e4525cd2f3e0808a3741b3f8d77f46f0661945f7b",
    "Os": "linux",
    "Parent": "abd65ce243a5b015bb49f3e958103a5cc0c5f14938df4e480ded25f3ecf878e7",
    "Size": 0,
    "VirtualSize": 390826666
}
]

【问题讨论】:

  • 你的入口点正确吗?我看到` "Entrypoint": [ "bin/a3-write-back" ],` 应该是 /bin 而不是 bin 吗?你能发布你的 Dockerfile 吗?
  • 是的,记住你的“bash”命令将被你的入口点脚本解释,这很可能是问题
  • bin/a3-write-back 是什么样的?如果它是一个 bash 脚本,它是否是顶部 bash 脚本的正确路径?另一件事是docker run -P mylocalimage /bin/bash 看看会发生什么,你应该有一个外壳。

标签: docker


【解决方案1】:

您的图像基于busybox,它没有bash shell。它确实有一个位于/bin/sh 的外壳。

所以这不起作用:

$ docker run -it busybox bash
exec: "bash": executable file not found in $PATH2015/01/15 11:09:08 Error response from daemon: 
Cannot start container a5074af2f81f8cc1eb0076f4ec9ada5f87be1440006f54a9b06ab701fc60176a: exec:  
"bash": executable file not found in $PATH

但这确实:

$ docker run -it busybox /bin/sh
/ #

由于您的入口点脚本,可能会出现进一步的复杂情况,但您始终可以覆盖它。

【讨论】:

  • 天哪,这让我永远。谢谢你。请注意,这仅适用于我的 CMD
  • 在 Windows 上,这会将绝对路径粘贴到我的 git-bash.exe 所在的容器内
  • 在我的情况下,/bin/sh 符号链接到/bin/busybox,我尝试这样做docker run -it container_name /bin/sh,但它没有用。你能解释一下为什么吗?
  • @Long 我不确定。您需要打开一个新问题,提供有关您尝试过的内容和结果的完整信息
  • 我做到了。但我不知道为什么,虽然它进入了 bash:/code # 当我添加命令时它会冻结。之后没有答案。
【解决方案2】:

如果您的图像定义了 ENTRYPOINT,如何使用 bash 覆盖 docker run:

docker run -it --entrypoint /bin/bash <your-image>

【讨论】:

    【解决方案3】:

    如果您的图像具有已定义的入口点,这将不起作用。对于这些情况,请使用: ' docker run -it --entrypoint /bin/bash '

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多