希望這個Docker映像上最後一個問題,從Docker image run results in executable not found in path繼續。我發現在run
命令中包含-t
時,Docker映像無法運行。所以docker run -it <image> --version
只是退出沒有輸出。但是,如果我刪除-it
甚至只是刪除-t
,它會按我的預期輸出版本。爲什麼Docker映像不能與-t一起運行?
我的問題是,爲什麼它不能與-t
一起使用僞tty? ocaml/opam圖像是否會以某種方式防止這種情況發生?
Dockerfile
FROM ocaml/opam
SHELL ["/bin/sh", "-lc"]
LABEL io.whalebrew.name 'ocp-indent'
LABEL io.whalebrew.config.working_dir '/workdir'
WORKDIR /workdir
RUN opam init --auto-setup
RUN opam install --yes ocp-indent
RUN ocp-indent --help
COPY docker-entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["--help"]
docker-entrypoint.sh
#!/bin/sh -l
ocp-indent "[email protected]"
感謝馬特的解釋。我很猶豫是否要更改入口點,因爲在某些時候ocaml/opam會更新並使用4.05.0,並且我不想每次更改時都更改Dockerfile。我嘗試過的一件事,也許你可以告訴我,如果這是一個壞主意,將'#!/ bin/sh -l'改爲'#!/ bin/bash -l'。這似乎解決了它。 – user1795832
通常我會嘗試在Dockerfile或支持文件中顯示應用程序的所有配置,而不是在'-l'源文件的隨機配置文件中。作爲安裝的一部分,其他語言包管理器如'npm'或'composer'可以爲特定的版本創建一個通用的'bin'鏈接,也許'opam'可以選擇這樣做?但如果bash的作品...它的作品:) – Matt