[英]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
訪問遠程主機
MACHINE_STORAGE_PATH
以便容器可以使用它 MACHINE_STORAGE_PATH
設置為等於已安裝的卷 在這兩種情況下,我都可以看到機器存儲仍然存在,但是每當我創建一個新容器並運行docker-machine ls
都不會列出任何機器。
通過DOCKER_HOST
訪問遠程主機
docker-machine ssh manager-1 -N -L 2376:localhost:2376
export DOCKER_HOST=:2376
export DOCKER_TLS_VERIFY=1
-machine相同的證書: export DOCKER_TLS_VERIFY=1
和export 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_HOST
和DOCKER_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.