java - 无法运行docker镜像

标签 java spring-boot docker dockerfile alpine-linux

首先,如果我的问题听起来太简单或愚蠢,我很抱歉。我是 jetty worker 的新手。 我已经创建了 docker 镜像并传递了几个 jar 文件,这些文件将在容器启动时立即运行。 我想在容器启动时立即运行脚本“serve.sh” 我成功地很好地创建了图像,但是当我运行容器时,它抛出了这个错误:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-it\": executable file not found in $PATH": unknown.

这是我用来运行我创建的图像的命令:

docker run b24b37614e1a -it

这是我的 Docker 文件:

FROM openjdk:8-jdk-alpine
EXPOSE 8080:8080
COPY apigateway-0.0.1-SNAPSHOT.jar apigateway.jar
COPY authservice-0.0.1-SNAPSHOT.jar authservice.jar
COPY institutionsservice-0.0.1-SNAPSHOT.jar institutionsservice.jar
COPY messagesservice-0.0.1-SNAPSHOT.jar messagesservice.jar
COPY postsservice-0.0.1-SNAPSHOT.jar postsservice.jar
COPY userservice-0.0.1-SNAPSHOT.jar userservice.jar
COPY serve.sh serve.sh
CMD [ "bash" "./serve.sh" ] 

请问我做错了什么?我是 Docker 新手

最佳答案

有几件事您应该更正,第一个是 CMD 格式,应该是

CMD instruction has three forms:

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
CMD [ "/bin/bash" , "./serve.sh" ] 

另一件事,当你执行docker run时,说明是

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

这意味着所有选项都必须位于 IMAGE 之前,而在您的情况下,it 出现在 IMAGE 之后。

正确的命令应该是

docker run -it b24b37614e1a

顺便说一句,小问题,为什么要运行此应用程序的交互式容器。理想情况下,它应该是这样的

docker run -p $HOST_PORT:$APP_PORT b24b37614e1a

-p => 将容器的端口发布到主机

然后您可以访问您的应用程序localhost:$HOST_PORTmachine_IP:$HOST_PORT

关于java - 无法运行docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62053800/

相关文章:

java - 为什么在通过连接 JPA 中的两个不相关实体来使用投影获取数据时未设置投影字段?

spring - Gradle 与 QueryDSL 4.1.4 和 Intellij

java - 启用非安全/健康端点的 Spring Boot 2

docker - 如何修复 microk8s 上的 "Failed to pull image"

.net - 无法将 .bak 文件复制到 docker 容器

angularjs - 使用SASS的无效US-ASCII字符

java - 从 "raw"文件夹中的资源 wav 文件获取输入数据

java - 替换链表中的元素

java - 将 byte 提升为 int 或 long

java - 为什么此 Java PreparedStatement 会抛出参数索引 = 1 的 ArrayIndexOutOfBoundsException 0?