【问题标题】:Docker CMD - Path to scriptDocker CMD - 脚本路径
【发布时间】: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


【解决方案1】:

您正在将文件复制到/app/data这一步COPY --from=base /app/data/

那就试试吧:

CMD ["/app/data/startup.sh", "start"]

【讨论】:

  • 很抱歉,最后有一个错字。我更新了问题中的路径。
  • 在这种情况下startup.sh 不正确?
  • COPY --from=base /app/data/startup.sh /app/startup.sh怎么样
【解决方案2】:
CMD ["/app/data/startup.sh", "start"]

应该工作

【讨论】:

  • 很抱歉,最后有一个错字。我更新了问题中的路径。
  • 我会写绝对复制命令。你试过这个吗?
  • 你的意思是COPY --from=base /app/data/startup.sh /app/startup.sh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2014-10-04
  • 2011-01-10
相关资源
最近更新 更多