2015-09-05 15 views
6

我正在使用docker-compose爲開發。在這個過程中,我經常需要構建5個容器(1個用於web服務器,4個用於postgres,redis,mongo等)。 Web服務器容器配置爲包含其他容器的鏈接,它具有自己的ENV變量,來自開發主機的已安裝卷。使用docker-compose構建容器,但稍後使用-it選項運行/ etc/bash?

問題是我不需要web容器來運行服務器本身。這是我需要執行/etc/bash-it選項內的Web容器,所有依賴容器創建後。這就是爲什麼,我對Web容器dockerfile結尾:

CMD /bin/true 

顯然,這種容器不會在運行,所以我不能用像水木清華

docker exec -it <CONTAINER ID> /bin/bash 

爲「輸入」並運行node app.js或一些其他任務。

任何方式來構建容器作爲docker-compose.yml文件的一部分,但後來用-it選項運行/ etc/bash?

BTW,我當然可以手動啓動獨立的Web容器與

docker run \ 
--link postgres 
--link ... 
-e "NODE_ENV=development" \ 
-e ... \ 
... 
... 
.. 

,但這種情況下,我需要追加的各個環節,ENV瓦爾,體積等作爲變元的,每次我要去開發應用程序。

+0

你能解釋一下你的用例/工作流程嗎?似乎不必要的複雜? – johnharris85

回答

12

看起來像docker-compose run將成爲你的朋友。從docker compose docs

對服務運行一次性命令。例如,以下命令啓動Web服務並將bash作爲其命令運行。

$ docker-compose run web bash

命令docker-compose run <service-name>還確保所有需要的容器(例如那些提供體積和鏈接)將之前的容器<service-name>啓動,如果它們尚未運行。

如果您使用任何端口映射,您可能會考慮使用docker-compose run --service-ports <service-name>。如果沒有該選項,docker-compose只會在使用docker-compose up時映射端口。

docker run一樣,您也可以使用--rm選項在完成處理後移除容器。

如果您的圖片使用ENTRYPOINT,您應該考慮在docker-compose.yml中用entrypoint: /bin/bash覆蓋此內容。

+0

謝謝Jan,但不是我所需要的,但是我找到了一個解決方案。我會盡量在幾天後發佈。 – f1nn

+0

謝謝,這對我很好。 –

相關問題