我正在爲Atlassian JIRA創建Docker映像。 Dockerfile可以在這裏找到:https://github.com/joelcraenhals/docker-jira/blob/master/DockerfileDocker:在創建映像時修改文件
但是我想在圖像創建期間啓用Docker鏡像中的Tomcat服務器上的HTTPS連接器,以便在鏡像創建過程中配置server.xml文件。
如何修改容器中的某個文件?
最好的問候,
我正在爲Atlassian JIRA創建Docker映像。 Dockerfile可以在這裏找到:https://github.com/joelcraenhals/docker-jira/blob/master/DockerfileDocker:在創建映像時修改文件
但是我想在圖像創建期間啓用Docker鏡像中的Tomcat服務器上的HTTPS連接器,以便在鏡像創建過程中配置server.xml文件。
如何修改容器中的某個文件?
最好的問候,
您需要將此圖片與您的自定義配置文件的延伸,以下內容寫你自己的Dockerfile
:
FROM <docker-jira image name>:<tag>
COPY <path to the server.xml on your computer, relative to Dockerfile dir> <path to desired location of server.xml inside the container>
之後,你需要建立並運行你的新形象:
docker build . --tag <name of your image>
docker run <name of your image>
替代一) 我會說你走錯了這裏的路徑。您不希望在圖像創建過程中這樣做,而是在入口點期間。
碼頭工人在第一個容器啓動期間配置服務是非常普遍和最好的做法,例如,對數據庫進行種子處理,生成密碼和種子,並在您的情況下根據模板生成配置。
通常這些配置文件是由ENV變量控制的,您將其傳遞給docker run
,或者更確切地說,在您的docker-compose.yml
中,在更復雜的環境中,配置變量的來源可以是consul或etcd。
對於您的例子,例如你可以引入一個ENV變量'USE_SSL',然後在你的入口點使用sed
來替換server.xml中的東西,但是因爲你需要更多的東西,比如設置reverse_proxy域和東西,你應該使用tiller :https://github.com/markround/tiller
創建一個server.xml.erb文件,放置想要變爲動態的變量,如果條件是如果您想排除某個節(如果未設置USE_SSL),那麼讓tiller使用ENVIRONMENT作爲數據源。
備選方案B) 如果你真的想留下來與「圖像生成」的概念(不推薦),你應該使用所謂的build_args https://docs.docker.com/engine/reference/commandline/build/
添加到您的搬運工文件
ARG USE_SSL
RUN /some_script_you_created_to_generate_server_xml.sh $USE_SSL
你仍然需要一個bash /無論腳本some_script_you_created_to_generate_server_xml.sh
它採取的參數,並創造條件,無論你想要的。當東西變得更大時(與運行某些seds/awks相比),分櫱雖然會更方便
然後,在構建圖像時,可以使用 `docker build。 --build-arg USE_SSL = no -t yourtag