当前位置: 首页 > 面试题库 >

为什么Docker不能执行'bash'?

严嘉良
2023-03-14
问题内容

我在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
}
]

问题答案:

您的图片基于不带bash外壳的busybox。它的确有外壳/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
/ #

由于您的入口点脚本,可能还会带来更多复杂性,但是您始终可以覆盖它。



 类似资料:
  • 问题内容: 我的脚本无法执行并抛出 。为什么这样? Dockerfile: docker-entrypoint.sh: 作品 Dockerfile: 问题答案: 该图像不包含您尝试用shebang调用的图像。您应该将其更改为脚本,或者将其删除。

  • 问题内容: 在OmniFaces中,FullAjaxExceptionHandler找到正确的错误页面以使用后,将调用JSF运行时来构建视图并呈现它,而不是包含AJAX调用的页面。 为什么这个?恕我直言,只是执行一个会更简单?是否有这样做的具体原因? 我们正在基于FullAjaxExceptionHandler编写我们自己的ExceptionHandler,并想了解这种设计背后的原因。 问题答案:

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的

  • 在给vs的一般处理程序设置断点时,能给程序点入断点,后面浏览器执行程序断点变成白色圆圈,程序继续往下进行断点恢复原样,此过程中断点未执行,根本就没有进入调试 代码无问题,无报错,与数据库连接也正常,但是就是获取不到数据。 设置断点也无效,换了浏览器也没用,因为是别人的代码直接复制过来,也特别去把要求与源代码格式一致的复选框去掉了。 题目来源及自己的思路 相关代码 粘贴代码文本(请勿用截图) 你期待

  • 问题内容: 我们可以使用docker拉取不同的图像。而且这些映像是不同的linux发行版。但是,无论运行在哪个linux distro docker上,docker都可以像在虚拟机中一样运行这些不同的linux发行版。 我知道docker使用aufs来控制不同的读写访问级别。因此它可以重用主机上的某些文件。但是当主机运行时,docker如何在容器中运行?图像是否包含二进制文件?但是,不同的Linu

  • 问题内容: 我正在学习Go,并且想尝试goroutine和频道。 这是我的代码: 结果如下: 我不明白为什么我的goroutine永远不会执行。没有输入“进入goroutine”,并且没有任何错误消息。 问题答案: 事实是您的goroutine开始执行,但是在执行任何操作之前就结束了,因为您的程序在打印后立即停止:goroutine的执行与主程序无关,但是将在与程序相同的位置处停止。因此,基本上,