2016-11-15 54 views
0

我試圖在使用docker的localhost:8000上運行javascript應用程序。我想做的一部分是根據docker run命令交換一些配置文件,我想將一個環境變量傳遞到容器中,以便bash腳本可以使用它作爲參數。在啓動之前在NGINX泊塢窗容器中運行bash腳本

什麼我dockerfile正在尋找類似的是:

FROM nginx 
COPY . /usr/share/nginx/html 
CMD ["bash","/usr/share/nginx/html/runfile.sh"] 

而且bash腳本是這樣的:

#!/bin/bash 
if [ "$SECURITY_VERSION" = "OPENAM" ]; then 
    sed -i -e 's/localhost/openam/g' authConfig.js 
fi 

docker run -p 8000:80 missioncontrol:latest -e SECURITY_VERSION="TEST" 

碼頭工人給了我一個異常說找不到-e exec命令。

但是,如果我更改dockerfile使用ENTRYPOINT而不是CMD,-e標誌有效,但Web服務器不啓動。

有什麼我在這裏失蹤?入口點被重寫或什麼?

編輯:

所以我已經更新了我dockerfile使用ENTRYPOINT ["bash","/usr/share/nginx/html/runfile.sh", ";", " nginx -g daemon off;"]

但泊塢窗容器仍然關閉。有什麼我失蹤?

+1

你可能真的不想要'-e'。你也可能想'RUN'而不是'CMD',所以'RUN/usr/share/nginx/html/runfile.sh'? –

+0

但是我想從碼頭運行命令中傳遞一個值,有沒有比-e更好的方法? 我曾考慮 '搬運工運行-p 8000:80 missioncontrol:最新/斌/慶典-c 「/usr/share/nginx/html/runfile.sh OPENAM」' 但Web服務器沒有啓動然後 – chiloutus

+0

我在談論sed命令。 :P –

回答

1

nginx容器已經定義了入口點。如果你還定義了CMD,它將把它們組合成'入口點CMD',這樣CMD就成爲入口點的參數。這就是爲什麼你需要重新定義入口點才能使之工作。

通常ENTRYPOINT是這樣定義的,如果你也傳遞CMD,它將由ENTRYPOINT腳本執行。但是,每個容器都可能不是這種情況。

+0

是的,這是我的懷疑,我可能需要看看nginx文檔,看看我能否找到它們使用的入口點 – chiloutus

+0

因此,我更新了我的dockerfile使用 'ENTRYPOINT [「bash」,「/ usr/share/nginx/html/runfile.sh」,「;」,「nginx -g守護進程關閉;」]' 但碼頭容器仍然關閉下。有什麼我失蹤? – chiloutus