用空格覆盖docker入口点

时间:2018-04-21 01:18:59

标签: docker docker-compose

我正在尝试使用 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

2 个答案:

答案 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"] 并且由于 npmstart 之间的空间,我无法轻松运行它

因此,正如@VonC 的回答所建议的,您可以在图像名称之后传递参数,例如

docker run -p 4200:4200 --entrypoint npm ihamzakhanzada/angular-app:1.1 start

其中 ihamzakhanzada/angular-app:1.1 是图像的名称。