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 加载镜像启动后,出错的问题。
操作记录:
在执行
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 的开头添加以下行:
CMD ["java", "-jar", "myapp.jar"]
可以使用以下命令来启动应用程序:
docker-compose up
由于 Docker 在创建容器时未能找到可执行的命令,通常是在 Dockerfile 的 ENTRYPOINT 或 CMD 指令中。
jar文件不存在或者不正确:确保 /usr/local/demo.jar
文件存在,并且可以在没有任何参数的情况下运行。手动运行这个 jar 文件,看看是否有任何错误。你也应该确保这个 jar 文件在构建 Docker 镜像时实际上被正确复制。
build路径问题:在你的 docker-compose
文件中,你的服务 demo
的构建路径是 /data/docker-compose/demo
。要确保这个路径实际上存在,并且包含你的 Dockerfile 和 jar 文件。
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 命令,看看是否可以解决问题。