docker 错误:Error response from daemon: No command specified

记录一次docker 加载镜像启动后,出错的问题。
操作记录:
在执行

docker save -o xxx.tar  xxx

时,没有使用镜像的名字加版本号的方式,而是采用了镜像id的方式,这样虽然同样可以保存镜像,但是造成了下面的问题。
转移到另一台机器,执行

docker load -i xxx.tar

加载镜像时,会发现加载进来的镜像只有镜像id ,并不存在镜像名和版本号,为了方便标识,所以采用了

docker import xx.tar  xx:xxx 

的方式加载了镜像,但是当执行 docker run -d xxxx 生成容器时,会发现报错

Error response from daemon: No command specified

原因是因为:
运行导入的镜像必须带command,否则启动会报错:Error response from daemon: No command specified
具体的command需要在导出容器的时候通过 docker ps 查看到

看完整的command的内容:

 docker ps  --no-trunc 

结果打印

 root@hombd03 ~]# docker ps --no-trunc | grep 'zoo'
e65c84b1ffae1c6e774d8140eb77e0d2913259ad89bf835c4ac4630d5c802187   bitnami/zookeeper:3.7.0-debian-10-r295   "/opt/bitnami/scripts/zookeeper/entrypoint.sh /opt/bitnami/scripts/zookeeper/run.sh"   14 hours ago   Up 14 hours   2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:8181->2181/tcp, :::8181->2181/tcp              zookeeper
[root@homaybd03 ~]# 

可以看到command命令为:

 /opt/bitnami/scripts/zookeeper/entrypoint.sh /opt/bitnami/scripts/zookeeper/run.sh

加上上述命令在导出的镜像运行,报错:

 starting container process caused "exec: \" /opt/bitnami/scripts/zookeeper/entrypoint.sh /opt/bitnami/scripts/zookeeper/run.sh": stat /bin/bash: no such file or directory": unknown

docker inspect
获取容器/镜像的元数据
比如 : 容器ID , 容器名称 , 容器状态 , 容器镜像 , 挂载情况 , 网络信息 。

[root@hombd03 opt]# docker inspect bitnami/zookeeper:3.7.0-debian-10-r295
[
    {
        "Id": "sha256:45b609ee38ab2a792b7a5feeb588e79946cf2075d40d50bc3f20185867fce74c",
        "RepoTags": [
            "bitnami/zookeeper:3.7.0-debian-10-r295"
        ],
        "RepoDigests": [
            "bitnami/zookeeper@sha256:ec95bd87ef783dedac75d7b1be35423efe12cb3bfdc71b80e7ca14ac44f33f5e"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2022-02-16T22:16:17.00142189Z",
        "Container": "752fd8af3be17cc0b08305ca9be72df3ff9a890bf3d0d29f721440a2fb245242",
        "ContainerConfig": {
            "Hostname": "752fd8af3be1",
            "Domainname": "",
            "User": "1001",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "2181/tcp": {},
                "2888/tcp": {},
                "3888/tcp": {},
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/opt/bitnami/common/bin:/opt/bitnami/java/bin:/opt/bitnami/zookeeper/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "HOME=/",
                "OS_ARCH=amd64",
                "OS_FLAVOUR=debian-10",
                "OS_NAME=linux",
                "BITNAMI_APP_NAME=zookeeper",
                "BITNAMI_IMAGE_VERSION=3.7.0-debian-10-r295"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/opt/bitnami/scripts/zookeeper/run.sh\"]"
            ],
            "Image": "sha256:6a7112a7fbac284bd4a1e5c143cc58a2c5c360a86327432f80eb8547a98a225c",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/opt/bitnami/scripts/zookeeper/entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "Bitnami <containers@bitnami.com>"
            }
        },
        "DockerVersion": "19.03.15",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "1001",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "2181/tcp": {},
                "2888/tcp": {},
                "3888/tcp": {},
                "8080/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/opt/bitnami/common/bin:/opt/bitnami/java/bin:/opt/bitnami/zookeeper/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "HOME=/",
                "OS_ARCH=amd64",
                "OS_FLAVOUR=debian-10",
                "OS_NAME=linux",
                "BITNAMI_APP_NAME=zookeeper",
                "BITNAMI_IMAGE_VERSION=3.7.0-debian-10-r295"
            ],
            "Cmd": [
                "/opt/bitnami/scripts/zookeeper/run.sh"
            ],
            "Image": "sha256:6a7112a7fbac284bd4a1e5c143cc58a2c5c360a86327432f80eb8547a98a225c",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/opt/bitnami/scripts/zookeeper/entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "Bitnami <containers@bitnami.com>"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 468138823,
        "VirtualSize": 468138823,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/f95f05eadb9bb8070f1ab783c09c78611c93787511c023dbfb7120da88dec57a/diff:/var/lib/docker/overlay2/6e423c006f99f140d96926700d40886e84e4a972c8be5b90c33c283d1624775b/diff:/var/lib/docker/overlay2/5dc9a6af0397728dcaa26d3e9967c0881720ab8b58c0ee88e46935285832d657/diff:/var/lib/docker/overlay2/900da13ce663f5dd8514d4de798d08b6d5733f52f5b425e40bf0536007d20a45/diff:/var/lib/docker/overlay2/f4fd71926b31fd53373368177058bb9c3da778a250785a52d0da3c76b1a8c90b/diff:/var/lib/docker/overlay2/279ddeacfd766da362747453c185d3b33ead677ad1e69f2264a7d5a3a016b06c/diff:/var/lib/docker/overlay2/2cfc0cadc946ead6ae24605d028422f68497987586da26372bfdf5216c830dca/diff:/var/lib/docker/overlay2/5d57724482d8de579523a6002ebcdc9d2d92a17a041b5042e0aad70760908761/diff:/var/lib/docker/overlay2/70050ade5cf3d75f5a7a43f9c2baffb5277b5f64d406f671f3b5acde0e2a0d02/diff:/var/lib/docker/overlay2/68fc31637545f87be1bb8916cf2fc113b958357e716e585c6efc6ca683708b91/diff:/var/lib/docker/overlay2/252acc70a8e346e98a7ea2d9c159ee85105a5353f2d6dba04af2c8148d933a7f/diff:/var/lib/docker/overlay2/7bf5b360f214e3ec08473d3949f5de30b8834788969209e89ea958ee9e62635b/diff",
                "MergedDir": "/var/lib/docker/overlay2/802c30c17becaa44b97513ec40804147a7778a0dc21b8b334dbdc35832f77050/merged",
                "UpperDir": "/var/lib/docker/overlay2/802c30c17becaa44b97513ec40804147a7778a0dc21b8b334dbdc35832f77050/diff",
                "WorkDir": "/var/lib/docker/overlay2/802c30c17becaa44b97513ec40804147a7778a0dc21b8b334dbdc35832f77050/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:ae58f1561944087b459d2688dff7eda143f4d7512f05bf2b52f134fdfd2b8cd4",
                "sha256:49b6367d14bea358fde78c72c9e8100e770fa37e0293a6298bc9561cdfceaeb0",
                "sha256:d22afaaa98cc3d77619b7df88ce5755897be196fca05de9567f246c12158a5c7",
                "sha256:2373f8884a29cf147f46e65765842e529fe4465525a1e2347fdac93b754cbc05",
                "sha256:f64ed979811965756ee8cc1052bda7dcf59613571a900838a1b56afccbda3b54",
                "sha256:0883ecaa71cfdb293427fa667a025256068c18ded3344df24136151c1672c039",
                "sha256:1eb181a74aefe42e38253825cd2a4f2047768f70df92ae9f07e546b4d6bb6e81",
                "sha256:349ba24e372505a7629ecfd292bd600c28947d69e27b44f32e1ffaeaff198db8",
                "sha256:a09609af3fbd296180c13efa8ced1e46edcb319a0eea009b01b28387df8ae990",
                "sha256:520c625db0d5fffcc3e6ef6b093f69361b3f8caaeccafb2d83fbe44f0eef82b0",
                "sha256:5da386d3ae9e330bf4cb3c8fb680d4fceb3dc589dd55f2a79aee4f6d390b2275",
                "sha256:1a3bcdf6e969353fa2265599c9509055242f1c95efa4c3c724a4379478fb03c4",
                "sha256:2f6f1f6abc48ad0808a42d5f8d6b12320ff10b25e76cceb7bca5574298a79a6e"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]
[root@homaybd03 opt]# 

终极解决

经过两天的折腾,终于找到原因所在了,原来我在导出镜像的时候用的是 docker save 命令,在导入的时候用了 docker import 方法了,应该用 docker load 进行加载进来,这样镜像就不会丢失 command 命令了。

docker save/load 一般导出镜像,导出导入镜像
docker export/import 一般导出容器,


相关文章:
运行导出的镜像报错:docker: Error response from daemon: No command specified.
docker--导出镜像 save/export、导入镜像 load/import区别及使用场景

为者常成,行者常至