You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker run使用--entrypoint执行cp拼接命令启动报错原因问询

错误原因

  • 核心原因:--entrypoint的解析规则不支持直接传入带shell语法的命令串
    Docker的--entrypoint参数默认会将传入的值当做单个可执行程序的路径处理,你传入的cp configs var/opt/configs/ && java -jar app.jar是包含shell逻辑连接符&&的复合命令,会被Docker整体识别为一个可执行文件名去系统路径查找,显然不存在名称为这整串字符的程序,因此触发no such file or directory报错。
  • 辅助原因:shell语法需要对应进程解析
    &&属于shell专属的语法关键字,只有在sh/bash等shell进程中运行才会被正确识别为「前序命令执行成功再执行后序命令」的逻辑,直接传给entrypoint没有对应进程处理该语法,本身也无法正常执行。

另外还有两个容易触发后续报错的隐藏问题:

  1. 你写的目标路径var/opt/configs/是相对路径,建议改为绝对路径/var/opt/configs/避免工作目录变动导致拷贝失败;同时要提前确认目标目录存在,不存在的话可以在命令前加mkdir -p /var/opt/configs创建。
  2. 原Dockerfile中jar包是拷贝到根目录的/app.jar,你命令中写的app.jar是相对路径,建议替换为绝对路径避免找不到文件。

符合要求的正确运行命令

docker run --entrypoint="sh" app:latest -c "mkdir -p /var/opt/configs && cp -r configs /var/opt/configs/ && java -jar /app.jar"

原理是显式将entrypoint指定为shell程序sh,然后通过sh的-c参数传入整串复合命令,由sh进程负责解析执行shell语法,就能符合要求完成配置拷贝和启动的操作。


内容的提问来源于stack exchange,提问作者Red cartridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:45:07