簡體   English   中英

從容器內部訪問主機docker-machine

[英]Access host docker-machine from within container

我有一個用於運行CI / CD構建的映像(使用GitLab CE)。 我想在容器中部署執行以下操作的應用程序:

eval "$(docker-machine env manager)"
sudo docker stack deploy --compose-file docker-stack.yml web

但是,我希望docker-machine訪問主機系統上定義的機器,因為容器將被破壞,並且我不想在映像中包括訪問詳細信息。

我已經嘗試了幾件事

通過docker-machine訪問遠程主機

  • 在主機上創建docker-machine並掛載MACHINE_STORAGE_PATH以便容器可以使用它
  • 從容器內手動連接到遠程docker-machine並將MACHINE_STORAGE_PATH設置為等於已安裝的卷
  • 安裝Docker套接字

在這兩種情況下,我都可以看到機器存儲仍然存在,但是每當我創建一個新容器並運行docker-machine ls都不會列出任何機器。

通過DOCKER_HOST訪問遠程主機

  • 將遠程機器docker端口轉發到主機docker端口docker-machine ssh manager-1 -N -L 2376:localhost:2376
  • export DOCKER_HOST=:2376
  • 告訴docker使用與export DOCKER_TLS_VERIFY=1 -machine相同的證書: export DOCKER_TLS_VERIFY=1export DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/manager-‌​1
  • 使用docker info測試

error during connect: Get https://localhost:2376/v1.26/info: x509: certificate signed by unknown authority給我error during connect: Get https://localhost:2376/v1.26/info: x509: certificate signed by unknown authority

關於如何從容器內執行遠程部署的任何想法?

謝謝

編輯

這是一個嘗試並幫助更好地傳達方案的圖表。

建築設計師

請勿為此使用docker-machine。

Docker機器將文件存儲在$ HOME / .docker / machine中,因此當您使用該文件夾的新副本重新啟動時,所有先前定義的機器將被刪除。 您可以將該文件夾存儲為卷,但是有一種更簡單的方法可以實現您的目的。

解決方案是安裝docker套接字,並以root身份或來自與docker套接字具有相同gid的用戶(請注意,容器內部和外部的組名稱本身可能不匹配,因此gid很重要),運行docker ...命令正常。 您可以完全跳過docker-machine eval,因為您是針對本地docker套接字運行命令。

如果您需要遠程運行命令,我發現手動定義DOCKER_HOSTDOCKER_TLS_VERIFY變量比使用DOCKER_TLS_VERIFY docker-machine更容易。

如果您想從CI容器與Docker主機進行通信,則可以在啟動CI容器時簡單地安裝Docker套接字:

docker run -v /var/run/docker.sock:/var/run/docker.sock <gitlab-image>

現在,您可以在CI容器中的主機上運行docker命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM