2016-04-30 188 views
1

我使用docker撰寫爲我的網站創建基本環境(此刻只在本地,因此我不在乎安全問題)。目前我使用3個不同的容器」Docker - 從所有容器運行命令

  • 爲nginx的
  • 爲PHP
  • 爲MySQL

我可以明顯地登錄到任何容器來運行的命令。比如我可以ssh到PHP容器來驗證PHP版本或運行PHP腳本,但問題是 - 是否有可能具有這樣的配置,以便我可以從運行例如一個SSH容器的所有容器運行命令?

例如,我想運行如下命令:

php -v 
nginx restart 
mysql 

在登錄到所有服務的一個公共SSH後。

有沒有可能?我知道有exec命令,所以我可以在容器的每個命令名之前添加它,但它不夠靈活以至於無法使用,並且在更多容器的情況下會越來越困難。

所以問題是 - 有沒有可能,如果是的話,怎麼可能實現?

+0

一般來說,你不應該在你的容器中運行'sshd'; 'docker exec'是一個更好的主意,因爲它不需要在每個容器中運行另一個服務。 – larsks

+0

@larsks理論上是真的,但是例如調試呢?我需要SSH來在我的IDE中進行調試,沒有問題。我剛剛用SSH建立了另一個容器,我可以通過SSH進行SSH訪問,但我不知道是否有可能以某種方式從所有其他容器運行命令。還有什麼情況下,如果我運行另一個容器吞噬例如?爲了運行gulp,我需要將'docker exec'運行到一個容器中,對於'php'我需要將'docker exec'運行到另一個容器中。 –

+0

爲什麼你需要SSH才能在IDE中進行調試?你能更詳細地描述你的用例嗎?要回答您的問題的第一部分,您可以使用Makefile來自動執行常見任務。 –

回答

1

你的問題是:

是否有可能呢?

答案是:

沒有

這是由於你的組合是將兩個限制。你的第一個限制是:

  1. 使用SSH不EXEC

這是definitly可能在每個容器和設置運行安全的SSH服務,這樣就可以運行例如SSH命令無密碼模式

參見例如, Passwordless SSH login

你的第二限制是:

  • 一個公共SSH所有服務
  • ,這現在將是棘手的部分。您將不得不:

    • 在例如創建一個共同的ssh服務器。爲了這個目的,或者使用一個容器
    • 創建通信或容器之間的一個特殊的容器
    • 確保SSH服務器知道哪些命令是哪個容器

    這所有的一切會如此相比於一個簡單的bash或python腳本,它可以對exec命令執行相同的操作,在所有的「否」都是恕我直言,比試圖解決學術問題更好的答案是「可能會有一些棘手的/奇特的解決方案」。

    +0

    感謝您的解釋。目前我已經決定將SSH添加到PHP容器中,並且爲了更詳細的配置,我可能會考慮是否將它們添加到PHP容器中或創建單獨的容器。 –