Docker Run覆盖含空格的Entrypoint失败问题求助
解决Docker Run覆盖Entrypoint的报错问题
哎,这个坑我也踩过!问题出在docker run --entrypoint的用法和docker-compose里的entrypoint逻辑不一样:
- 在docker-compose里,如果你把entrypoint写成单个字符串(不是数组形式),Compose会自动用shell去解析执行整个命令,所以你的配置能正常跑。
- 但
docker run --entrypoint参数只能接收单个可执行文件的路径,你把一整串命令塞进去,Docker会把这长串内容当成一个单独的可执行文件去找,当然找不到,所以才报exec: "...": stat ... no such file or directory的错。
正确的两种写法:
方法1:拆分命令(推荐,更符合Docker的entrypoint设计)
把--entrypoint指定为dlv这个可执行文件,然后把后面的所有参数放在镜像名称的后面:
docker run --security-opt seccomp:unconfined \ -v /你的本地目录:/容器内对应目录 \ --entrypoint "dlv" \ 你的镜像名称 \ debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --server
方法2:用shell包裹执行
如果需要用shell来处理命令(比如涉及环境变量、管道等场景),可以把entrypoint指定为sh或者bash,然后用-c参数传递完整命令:
docker run --security-opt seccomp:unconfined \ -v /你的本地目录:/容器内对应目录 \ --entrypoint "sh" \ 你的镜像名称 \ -c "dlv debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --server"
这样就能和你原来docker-compose里的配置效果完全一致啦!
内容的提问来源于stack exchange,提问作者Flynn Handley
相关产品推荐
相关产品推荐

