首先,对不起,如果我的问题听起来太简单或愚蠢。我是Docker的新手。 我已经创建了我的docker映像并传递了几个jar文件,这些文件将在容器启动时立即运行。 我想在容器启动时立即运行脚本“ serve.sh” 我成功地成功创建了图像,但是当我运行容器时,它引发了以下错误:
C:\ Program Files \ Docker \ Docker \ resources \ bin \ docker.exe:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:349:启动容器进程导致“ exec:\”-it \” :在$ PATH中找不到可执行文件”:未知。
这是我用来运行图像的命令:
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的新手
答案 0 :(得分:3)
请记住,docker args顺序很重要:
您写的docker run b24b37614e1a -it
与
docker run -it b24b37614e1a
希望它可以解决您的问题:)
答案 1 :(得分:3)
您需要纠正几件事,第一个是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
BTW ,小问题,为什么要运行此应用程序的交互式容器。理想情况下,应该是类似
docker run -p $HOST_PORT:$APP_PORT b24b37614e1a
-p
=>将容器的端口发布到主机
然后您可以访问应用程序localhost:$HOST_PORT
或machine_IP:$HOST_PORT
答案 2 :(得分:0)
docker run -it
然后 args(c / o Luca Fabbian)bash
。使用sh
。 (c / o MC Emperor)CMD ["sh", "./serve.sh"]
CMD ./serve.sh
CMD ["./serve.sh"]
这假设您已经参加了Luca的advice:
请记住,docker args顺序很重要: 您编写的docker run b24b37614e1a -it与docker run -it b24b37614e1a
不同
bash
。我拉出openjdk:8-jdk-alpine
图片进行确认,但它没有附带bash。 sh
附带有高山图像,因此除非您更正所使用的外壳或安装bash,否则提供的代码将永远不会起作用。
从您对尼舍的回应:
我收到此错误:“ sh:./serve.sh:未知操作数”
exec格式的我将我的CMD指令更新为:CMD [“ bin / bash”“ ./serve.sh”]
CMD接受一系列指令。 这些必须用逗号分隔。
执行此操作:
CMD [ "executable", "param1" ]
^
引述said,就像from the reference一样,有几种不同的方式使用CMD来完成相同的事情。
您可以实际上使用CMD的exec形式来表达以下内容:
CMD [ "sh", "./serve.sh" ]
除非需要,否则不需要键入/bin/sh
或/bin/bash
或所需的任何shell。但是,如果您不需要外壳,也可以在不使用外壳的情况下使用exec表单:
CMD [ "./serve.sh" ]