docker-compse 报错 Error response from daemon: No command specified,如何解决?

docker-compose 为什么报 Error response from daemon: No command specified
自己的springboot 程序 打包成 jar 写 dockerfile 和 docke-compose 用dockerr 运行 但是一直报这个错误
dockerfile 和 docker compose 都写的很简单
docker-compose 版本: v2.17.1
docker 版本 19.03
dockerfile:

FROM java:8
COPY demo.jar /usr/local
WORKDIR /usr/local
ENV LANG C.UTF-8
ENTRYPOINT ["java", "-jar", "/usr/local/demo.jar"]

docker-compose

version: '3'
services:
  demo:
    build: /data/docker-compose/demo
    volumes:
      - /data/docker-compose/demo/logs:/usr/local/logs
    ports:
      - 8091:8091

执行 docker-compse up -d 报错:

[+] Running 1/0
 ✔ Network docker-compose_default   Created                                                                                                                                                                                                                              0.0s 
 ⠋ Container docker-compose-demo-1  Creating                                                                                                                                                                                                                             0.0s 
Error response from daemon: No command specified

如果 我先用 dockerfile 生成 docker镜像 在用docker-compose 执行镜像 不 build 是没问题的

  • 这篇文章:docker: Error response from daemon: No command specified. 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: docker错误:Error response from daemon: No command specified中的 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 
    

使用docker-compose命令时遇到"Error response from daemon: No command specified"错误,通常是由于缺少要执行的命令。docker-compose命令需要指定要执行的操作,例如up、down、build等。

可以参考一下这篇文章:https://blog.csdn.net/u013189824/article/details/109623741

直接build看看

cd /data/docker-compose/demo
docker build -t test .

docker-compose.yml文件中有没有指定要运行的命令
例如:command: java -jar /usr/local/demo.jar # 指定要运行的命令

Error response from daemon: No command specified原因以及解决


一般来说产生这个报错是因为启动的容器是被docker export出来的镜像,具体报错如下

[root@dockertest container]# docker run --name nginx-import-test -d -p 4000:80 nginx-import-test:1.0  
docker: Error response from daemon: No command specified.
See 'docker run --help'.
被docker export出来的镜像在启动的时候需要指定command,例如我启动上述nginx容器,需要指定Command

Command可以通过下面命令查询到:

docker ps -a --no-trunc


查询到Command之后,运行容器:

docker run --name nginx-import-test -d -p 4000:80 nginx-import-test:1.0  /docker-entrypoint.sh nginx -g 'daemon off;'
容器就正常启动了:

发生这个错误,很有可能是你安装的docker版本与服务器版本不兼容导致的,可以查看下服务的版本是多少,然后调整你自己的版本,与之匹配即可。其次,镜像的导入导出与容器的导入导出是不一样的,注意使用的命令的语法:
镜像的导入导出命令:

docker save busybox > busybox.tar
docker load < busybox.tar

可能是版本不兼容,换个版本试试

Error response from daemon: No command specified 这个错误通常是因为 Docker daemon 没有收到任何命令。这可能是因为没有在 Dockerfile 中定义一个启动命令,或者是因为在 Dockerfile 中使用了错误的命令。

可以在 Dockerfile 的开头添加以下行:

Run a command when the container starts

CMD ["java", "-jar", "myapp.jar"]
可以使用以下命令来启动应用程序:
docker-compose up

TechWhizKid参考GPT回答:

由于 Docker 在创建容器时未能找到可执行的命令,通常是在 Dockerfile 的 ENTRYPOINT 或 CMD 指令中。

  • Dockerfile 和 docker-compose 文件看起来都很正常,应该可以正常工作。有几个可能的原因可能导致你的问题:
  1. jar文件不存在或者不正确:确保 /usr/local/demo.jar 文件存在,并且可以在没有任何参数的情况下运行。手动运行这个 jar 文件,看看是否有任何错误。你也应该确保这个 jar 文件在构建 Docker 镜像时实际上被正确复制。

  2. build路径问题:在你的 docker-compose 文件中,你的服务 demo 的构建路径是 /data/docker-compose/demo。要确保这个路径实际上存在,并且包含你的 Dockerfile 和 jar 文件。

  3. docker-compose版本问题:用的 docker-compose 版本是v2.17.1,而你的 Docker 版本是 19.03。你可能要更新你的 docker-compose 到最新版本,或者确保你的 docker-compose 版本和 Docker 版本兼容。

根据您提供的信息,报错信息"Error response from daemon: No command specified"通常是由于在docker-compose文件中没有指定命令导致的。
请确保您在docker-compose.yml文件中为您的服务指定了正确的命令。例如,如果您的springboot程序的jar包名为 myapp.jar ,您的docker-compose.yml文件应该类似于以下内容:
yaml

version: '2.1'
services:
  myapp:
    build:
      context: .
      dockerfile: Dockerfile
    command: java -jar myapp.jar

在上述示例中, myapp 是您的服务名称, build 指定了构建镜像的配置, command 指定了在容器内运行的命令。
请确保您的Dockerfile中也包含了正确的构建和运行命令。例如,您的Dockerfile可能类似于以下内容:
Dockerfile

FROM openjdk:8-jdk-alpine
COPY myapp.jar /app/myapp.jar
WORKDIR /app
CMD ["java", "-jar", "myapp.jar"]

在上述示例中,Dockerfile从基础镜像中创建了一个容器,将 myapp.jar 复制到容器中的 /app 目录,并设置工作目录为 /app 。最后,通过 CMD 指令指定了容器内运行的命令。
请确保以上步骤中的文件名和路径与您的实际情况相匹配,并重新尝试运行docker-compose命令。这样应该能够解决报错问题。

根据您提供的信息,Docker Compose 文件中似乎没有指定要运行的命令。这可能会导致 Docker Daemon 报告“没有指定命令”的错误消息。

您可以通过在 Docker Compose 文件中添加 command 部分来指定要运行的命令。例如:

version: '3'
services:
  demo:
    build: /data/docker-compose/demo
    volumes:
      - /data/docker-compose/demo/logs:/usr/local/logs
    ports:
      - 8091:8091
    command: java -jar /usr/local/demo.jar

在上面的示例中,command 部分指定了要运行的命令 java -jar /usr/local/demo.jar。这是您需要替换为您自己的命令,以便正确启动您的应用程序。

如果您已经在 Docker Compose 文件中指定了要运行的命令,但仍然出现该错误,则可能是 Docker Daemon 出现了其他问题。您可以尝试重新启动 Docker Daemon 并重新运行 Docker Compose 命令,看看是否可以解决问题。