我有一个用于运行CI / CD版本的图像(使用GitLab CE)。我想从容器中部署我的app做类似的事情:
prtcl.localIdentifier = "Test iOS device"
prtcl.remoteIdentifier = server.name
但是,我希望docker-machine访问主机系统上定义的机器,因为容器将被销毁,我不想在图像中包含访问细节。
我尝试了一些事情
通过eval "$(docker-machine env manager)"
sudo docker stack deploy --compose-file docker-stack.yml web
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
export DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/manager-1
这给了我docker info
关于如何在容器内执行远程部署的任何想法?
由于
修改
这是一个尝试帮助更好地传达场景的图表。
答案 0 :(得分:0)
请勿使用docker-machine。
Docker-machine将文件存储在$ HOME / .docker / machine中,因此当您使用此文件夹的新副本重新启动时,将删除所有先前定义的计算机。您可以将此文件夹存储为卷,但有一种更简单的方法可用于您的目的。
解决方案是安装docker socket,以root身份或者与具有与docker socket相同gid的用户(注意容器内部和外部的组名称可能不匹配,因此gid很重要),运行你的docker ...
命令正常。您可以完全跳过docker-machine
eval,因为您正在对本地docker socket运行命令。
如果您需要远程运行命令,我发现手动定义DOCKER_HOST
和DOCKER_TLS_VERIFY
变量更容易,而不是使用docker-machine
。
答案 1 :(得分:-1)
如果您想要从CI容器与Docker主机进行通信,只需在启动CI容器时安装Docker套接字:
docker run -v /var/run/docker.sock:/var/run/docker.sock <gitlab-image>
现在,您可以在CI容器中的主机上运行docker命令。