2017-09-23 157 views
2

我試圖建立以下Dockerfile,但它一直未能在RUN ocp-indent --helpocp-indent: not found The command '/bin/sh -c ocp-indent --help' returned a non-zero code: 127命令返回非零代碼:127

FROM ocaml/opam 

WORKDIR /workdir 

RUN opam init --auto-setup 
RUN opam install --yes ocp-indent 
RUN ocp-indent --help 

ENTRYPOINT ["ocp-indent"] 
CMD ["--help"] 

我撞壞成通過docker run -it <image id> bash -il和前跑圖像跑了ocp-indent --help,它運行良好。不知道爲什麼它失敗了,想法?

+0

我不知道爲什麼它會如果'run'工程是必要的,但你試過指定爲'ocp-完整路徑indent'? – kichik

+0

如何? '運行<路徑到ocp-indent.exe>'? – user1795832

+0

是的。它可能在'/ bin'或'/ usr/bin'中。 – kichik

回答

2

這是一個PATH相關的問題和配置文件。當您使用sh -cbash -c時,配置文件未加載。但是當您使用bash -lc時,它意味着加載配置文件並執行命令。現在您的配置文件可能有必要的路徑設置來運行此命令。

編輯-1

因此,與原來的答案的問題是,它不能正常工作。當我們有

ENTRYPOINT ["/bin/bash", "-lc", "ocp-indent"] 
CMD ["--help"] 

它最終轉化爲/bin/bash -lc ocp-indent --help,而它的工作,我們需要/bin/bash -lc "ocp-indent --help"。這不能通過在入口點使用命令直接完成。所以,我們需要一個新的entrypoint.sh文件

#!/bin/sh -l 
ocp-indent "[email protected]" 

確保chmod +x entrypoint.sh主機。並更新Dockerfile以下

FROM ocaml/opam 

WORKDIR /workdir 

RUN opam init --auto-setup 
RUN opam install --yes ocp-indent 
SHELL ["/bin/sh", "-lc"] 
COPY entrypoint.sh /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh"] 
CMD ["--help"] 

構建之後,並運行它的工作原理

$ docker run f76dda33092a 
NAME 
     ocp-indent - Automatic indentation of OCaml source files 

SYNOPSIS 

原來的答覆

您可以使用以下命令

docker run -it --entrypoint "/bin/sh" <image id> env 
docker run -it --entrypoint "/bin/sh -l" <image id> env 
docker run -it --entrypoint "/bin/bash" <image id> env 
docker run -it --entrypoint "/bin/bash -l" <image id> env 
方便地測試這兩個之間的區別

現在,無論你有沒有可以rect路徑,或者只有在使用-l標誌時纔會出現。在這種情況下,你可以改變你的泊塢窗映像的默認外殼下面

FROM ocaml/opam 

WORKDIR /workdir 

RUN opam init --auto-setup 
RUN opam install --yes ocp-indent 
SHELL ["/bin/bash", "-lc"] 
RUN ocp-indent --help 

ENTRYPOINT ["/bin/bash", "-lc", "ocp-indent"] 
CMD ["--help"] 
+0

'SHELL'行看起來好像需要超越'RUN'行。謝謝。 – user1795832

+0

我應該運行那些'docker run'命令的映像?將SHELL放在WORKDIR上面並構建它創建的映像,但由於此錯誤而不能在容器中運行:'來自守護程序的錯誤響應:oci運行時錯誤:container_linux.go:262:導致啓動容器進程「exec:\」 ocp-indent \「:在$ PATH中找不到可執行文件」' – user1795832

+0

@ user1795832,我不好意思您應該只使用'ENTRYPOINT [「/ bin/bash」,「-lc」,「ocp-indent」]'。更新了回答中的代碼 –

相關問題