這可能是因爲ruby可執行文件不在運行容器進程的用戶的路徑中(即, root
或用Dockerfile中的USER命令指定的用戶)。以下兩個選項可能會幫助您解決問題。
- 運行容器時指定ruby二進制文件的完整路徑。
docker run -it jikkujose/apple /usr/bin/ruby -e "puts 'Hello'"
- 將
/usr/bin
添加到Dockerfile中的路徑ENV PATH /usr/bin:$PATH
我不是100%確定這是有效的,但Dockerfile中的ENV運算符應該將此環境變量添加到容器。來源docker.com。
或者,您可以在Dockerfile中指定/usr/bin/ruby
作爲ENTRYPOINT
。那就是:ENTRYPOINT ["/usr/bin/ruby"]
。然後,您可以運行docker run -it jikkujose/apple -e "puts 'Hello'"
請注意,這會導致容器默認運行/ usr/bin/ruby,並且如果要運行ls
或其他命令,則需要覆蓋此入口點。
編輯:
最小可行的解決方案Dockerfile
下面給出。讓我們假設/ usr/bin不在$ PATH環境變量中,它位於Ubuntu映像中。
FROM ubuntu:latest
RUN apt-get install ruby -y
ENV PATH /usr/bin:$PATH
CMD ["bash"]
運行docker run --rm -it pathtest ruby -e "puts 'Hello'"
現在在終端輸出Hello
。
編輯2:
啊,你用Docker commit構建了鏡像。在運行docker run
命令時,您可以發送環境變量。要做到這一點,只需運行搬運工像這樣:
docker run --rm -e "PATH=/usr/bin" -it pathtest ruby -e "puts 'Hello'"
爲docker run
-e選項允許您指定或覆蓋容器內的環境變量。請注意,您將不得不提供您希望$ PATH的所有路徑與此方法相同。
您可能還想簡單地編輯容器內的PATH變量,然後重新發送容器,以便/ container存儲在$ PATH環境變量中。
其可能的路徑設置不正確使用二進制'在/ usr/bin中/ ruby'的完整路徑或嘗試'/ bin/sh -c「/ usr/bin/ruby -e」puts'Hello'「'請確保路徑正確。 – askb