2017-02-03 73 views
0

讀了Dockerfile文檔上ENTRYPOINT沒有發現,我有試圖重寫我的命令之一的一個問題:EXEC使用Dockerfile入口點

它今天運行,沒有問題:

# Startup 
ENTRYPOINT ["/etc/init.d/hook", "/run/apache2/apache2.pid", "/etc/init.d/apache2 start"] 

據各種消息來源,我應該用叉高管掛鉤的過程,所以我有簡單的改變入口點到

ENTRYPOINT ["exec", "/etc/init.d/hook", "/run/apache2/apache2.pid", "/etc/init.d/apache2 start"] 

但現在我收到以下錯誤:

container_linux.go:247: starting container process caused "exec: \"exec\": executable file not found in $PATH"

爲什麼exec不會被發現?這不是一個bash內建的嗎?

如果我附於至容器,我可以運行沒有問題

$ docker exec -it $(docker ps | grep imagename | awk '{print $1}') bash 
[email protected]:/# exec echo hi 
hi 

如何我在ENTRYPOINT指令中使用exec EXEC?

編輯

這裏是一個Dockerfile再現錯誤

FROM ubuntu:16.10 
ENTRYPOINT ["exec", "echo", "hi"] 

回答

0

有趣的是,我可以簡單地從一個陣列

去除參數,使這項工作按照預期

ENTRYPOINT exec echo hi 

雖然這會產生錯誤這將工作

ENTRYPOINT ["exec", "echo", "hi"] 
+1

這是因爲第一個表單被傳遞給一個shell,而第二個表單不是。所以'exec'被發現,因爲它是一個shell內建的。在第二種形式中,你調用'exec'並且沒有shell來提供它,它不存在。 –

0

ENTRYPOINT ["exec", "/etc/init.d/hook", "/run/apache2/apache2.pid", "/etc/init.d/apache2", "start"]

檢查文檔嘗試

https://docs.docker.com/engine/reference/builder/#/entrypoint

也應努力

ENTRYPOINT /etc/init.d/hook /run/apache2/apache2.pid /etc/init.d/apache2 start

+0

剛試過,和st病毒得到相同的錯誤,'container_linux.go:247:啓動容器過程導致「exec:\」exec \「:可執行文件找不到$ PATH」'它似乎找不到'exec'。 –

+0

你可以發佈你的Dockerfile嗎? – user2915097

+0

發佈了一個可重現的示例,並且還找到了解決方案,只需從數組中刪除所有內容即可。 –