2016-09-08 22 views
1

我有一個Dockerfile與此類似:泊塢窗的開發和生產

FROM tomcat:7-jre8-alpine 
... 
ENTRYPOINT ["sh", "docker-entrypoint.sh"] 

我希望能夠做所有的測試和開發後,將其用於生產。在開發過程中,我想使用JRebel並激活調試,最好不要修改Dockerfile或需要額外的修改。 To use JRebel可惜jrebel.jar需要在容器/圖像的一部分,JAVA_OPTS需要與增強:

"-agentlib:jdwp=transport=dt_socket, address=1043, server=y, suspend=n" 

是否有可能有:

"-javaagent:/jrebel.jar -Drebel.remoting_plugin=true" 

而且tomcat的debuggin已被啓用一個Dockerfile,然後通過運行選項或類似的東西,使我需要的開發選項?在開發過程中有一個可用於運行容器的「高效」泊塢窗圖像是否可行?

回答

1

然後通過運行選項或類似的東西,使我所需要的開發選項?

作爲一個可能的「運行選項」,您可以使用您在docker run command(或docker-compose 'environment' directive)定義了一個環境變量。

docker run -e "env=dev" ... 

然後你可以有你的形象使用腳本適應JAVA_OPTS或Tomcat選項,這取決於$ENV

如果$ENV未定義或定義,並且等於除「dev」之外的任何值,則不激活調試選項。

1

典型的方法是,當你開始你的容器指定一個不同的命令。您可以覆蓋入口點和CMD。

docker run -d --entrypoint "[]" myimage sh -c "./init.sh && ./some-other-script.sh && echo 'about to start' && ./docker-entrypoint.sh" 

如果你的命令的最後一個指令是主要的應用程序,記得用exec,使其作爲PID 1運行,並得到適當的SIGKILL和SIGTERM。例如:

docker run -d nginx sh -c "./inject-my-vars.sh && exec nginx -g 'daemon off;'"