我正在尝试使用 docker run 覆盖docker入口点。这适用于docker-compose:
myapp:
build: .
security_opt:
- seccomp:unconfined
entrypoint: dlv debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --server
volumes:
使用:
docker run --entrypoint "dlv debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --server"
结果:
exec: \"dlv debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --se
rver\": stat dlv debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --server: no such file or directory
答案 0 :(得分:3)
查看文章" How to properly override the ENTRYPOINT using docker run" Adrian Oprea。
The documentation 明确指出ENTRYPOINT仅指定容器启动时要运行的可执行文件。
这里有一些反直觉的东西,如果您仔细查看文档页面上的示例命令,您会看到参数在图像名称之后传递。
在你的情况下:
docker run --entrypoint dlv YOUR_IMAGE_NAME debug local/myorg/myapp -l 0.0.0.0:2345 --headless=true --log=true --server
^^^^^^^^^^^^^^^
答案 1 :(得分:1)
以更简单的方式扩展@VonC的答案,我不得不用ENTRYPOINT
覆盖我的npm start
,因为我在最后错误地写了ENTRYPOINT ["ng","serve"]
并且它抛出了错误
docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:367:导致启动容器进程:exec:“ng”:在 $PATH 中找不到可执行文件:未知。
这显然意味着 ng
没有被添加到 $PATH
环境变量中。
所以我不得不将我的 ENTRYPOINT
指令覆盖为 ENTRYPOINT ["npm","start"]
并且由于 npm
和 start
之间的空间,我无法轻松运行它>
因此,正如@VonC 的回答所建议的,您可以在图像名称之后传递参数,例如
docker run -p 4200:4200 --entrypoint npm ihamzakhanzada/angular-app:1.1 start
其中 ihamzakhanzada/angular-app:1.1
是图像的名称。