【发布时间】:2021-06-13 18:43:32
【问题描述】:
如何将脚本文件的路径传递给Dockerfile中的CMD?
这是我的 Dockerfile
FROM openjdk:8-jdk-alpine as base
EXPOSE 8080
WORKDIR '/app'
COPY run/ .
RUN mvn clean install
FROM openjdk:8-jdk-alpine
WORKDIR '/app'
COPY --from=base /app/data/startup.sh ./startup.sh
RUN ["chmod", "+x", "startup.sh"]
CMD ["startup.sh", "start"]
当我给CMD ["/app/startup.sh", "start"]时,抛出以下错误
Cannot start service myapp: OCI runtime create failed:
container_linux.go:367: starting container process caused: exec: "/app/startup.sh": stat
/app/startup.sh: no such file or directory: unknown
文档说路径是相对于 WORKDIR 的,所以我尝试像现在一样单独传递脚本名称 - CMD ["startup.sh", "start"] 导致以下错误:
Cannot start service myapp: OCI runtime create failed:
container_linux.go:367: starting container process caused: exec: "service.sh": executable file
not found in $PATH: unknown
startup.sh 是一个带有 shebang 的简单脚本文件 - #!/bin/sh
我在这里遗漏了什么吗?我在 Windows 上使用 docker 桌面,当我运行 docker-compose up 时出现错误,仅供参考。
请分享我如何解决此问题。谢谢
【问题讨论】:
-
你能仔细检查一下脚本是否有 Unix 行尾吗?如果它试图运行
/bin/sh\r作为脚本解释器,你会得到这样的错误。
标签: java docker docker-compose