如何在远程主机上运行docker compose?
我在本地编写了一个文件。如何在远程主机上运行容器包,如如何在远程主机上运行docker compose?,docker,docker-compose,Docker,Docker Compose,我在本地编写了一个文件。如何在远程主机上运行容器包,如docker compose up-dwithdocker\u host=?如果您不需要在本地计算机上运行docker容器,但仍然在同一远程计算机上,您可以在docker设置中更改此设置 在本地计算机上: 可以使用-H参数控制远程主机 docker -H tcp://remote:2375 pull ubuntu 要与docker compose一起使用,应在/etc/default/docker中添加此参数 在远程计算机上 您应该更改外部
docker compose up-d
withdocker\u host=
?如果您不需要在本地计算机上运行docker容器,但仍然在同一远程计算机上,您可以在docker设置中更改此设置
在本地计算机上:
可以使用-H参数控制远程主机
docker -H tcp://remote:2375 pull ubuntu
要与docker compose一起使用,应在/etc/default/docker中添加此参数
在远程计算机上
您应该更改外部地址的侦听,而不仅仅是unix套接字
有关更多详细信息,请参阅
如果您需要在多个远程主机上运行container,您应该从compose文档中配置Docker Swarm DOCKER_主机 设置docker守护程序的URL。与Docker客户端一样,默认为unix:///var/run/docker.sock. 这样我们就可以
export DOCKER_HOST=tcp://192.168.1.2:2375
docker-compose up
考虑到您能够登录到远程计算机,在该计算机上运行
docker compose
命令的另一种方法是使用SSH
通过scp
将docker compose.yml
文件复制到远程主机,通过SSH
运行docker compose
命令,最后通过再次删除该文件进行清理。
这可能如下所示:
scp ./docker-compose.yml SomeUser@RemoteHost:/tmp/docker-compose.yml
ssh SomeUser@RemoteHost "docker-compose -f /tmp/docker-compose.yml up"
ssh SomeUser@RemoteHost "rm -f /tmp/docker-compose.yml"
您甚至可以使用-f-
选项docker compose
将docker compose.yml
文件从stdin
管道传输,从而缩短文件的长度并省略对docker compose.yml
文件的发送和删除。只需将其内容传输到SSH
命令:
cat docker-compose.yml | ssh SomeUser@RemoteHost "docker-compose -f - up"
envsubst < docker-compose.yml | ssh SomeUser@RemoteHost "docker-compose up"
如果在docker compose.yml
文件中使用环境变量替换,上述命令将不会用远程主机上的本地值替换它们,并且由于变量未设置,命令可能会失败。为了克服这一问题,可以使用在将内容传输到SSH
命令之前,将变量替换为内存中的本地值:
cat docker-compose.yml | ssh SomeUser@RemoteHost "docker-compose -f - up"
envsubst < docker-compose.yml | ssh SomeUser@RemoteHost "docker-compose up"
envsubst
我最近发现的另一种可能性是通过SSH隧道控制远程Docker Unix套接字(这要归功于我学习这种方法的地方)
先决条件
您可以通过SSH连接到目标计算机。出于安全和方便的考虑,首选无密码、基于密钥的访问,您可以学习如何进行设置,例如,此处:
此外,一些消息来源提到,通过SSH隧道转发Unix套接字仅在OpenSSH
v6.7(运行SSH-V
进行检查)开始时可用,但我没有在较旧的版本上尝试这一点
SSH隧道
现在,在本地位置和远程计算机上的Docker Unix套接字之间创建一个新的SSH隧道:
ssh-nNT-L$(pwd)/docker.sock:/var/run/docker.sockuser@someremote
或者,也可以绑定到本地端口而不是文件位置。确保端口已打开以供连接,并且尚未使用。
ssh-nNT-L localhost:2377:/var/run/docker.sockuser@someremote
重定向Docker客户端
让终端保持打开状态,然后打开第二个终端。在这里,让Docker客户端与新创建的隧道套接字而不是本地Unix Docker套接字通信
如果绑定到文件位置:
export DOCKER\u HOST=unix://$(pwd)/DOCKER.sock
如果绑定到本地端口(如上所述的示例端口):
export DOCKER\u HOST=localhost:2377
现在,运行一些Docker命令,比如Docker ps
,或者启动容器、拉取映像等。只要SSH隧道处于活动状态,远程机器上的一切都会发生。要再次运行本地Docker命令,请执行以下操作:
- 点击第一个终端中的
,关闭隧道Ctrl+C
- 如果绑定到文件位置:再次删除临时通道套接字。否则,您以后将无法再次打开相同的文件:
rm-f“$(pwd)”/docker.sock
- 使Docker客户端再次与本地Unix套接字通信(如果未设置,则为默认值):
unset Docker\u主机
docker compose.yml
文件和其他资源或在远程机器上设置环境变量的麻烦(这很困难)
非交互式SSH隧道
如果要在无法使用交互式终端的脚本上下文中使用此选项,可以使用以下方法:
在发布和即将发布的docker compose v1.23.1
发行版之后,这将变得更加容易。上述Docker版本分别为Docker\u主机
环境变量和Docker…
命令的-H
参数添加了对ssh
协议的支持。下一个docker compose
release
首先,您需要(任何方法都可能需要)
然后,要么:
# Re-direct to remote environment.
export DOCKER_HOST="ssh://my-user@remote-host"
# Run your docker-compose commands.
docker-compose pull
docker-compose down
docker-compose up
# All docker-compose commands here will be run on remote-host.
# Switch back to your local environment.
unset DOCKER_HOST
或者,如果您愿意,只需一次执行一个命令:
docker-compose -H "ssh://my-user@remote-host" up
关于这一点,一个很好的地方是,您可以在
docker compose.yml
文件中使用的所有本地环境变量进行配置,而无需以某种方式将它们传输到远程主机。您现在可以使用docker上下文进行此操作:
docker上下文创建开发人员“docker”主机=ssh://user@远程机器“
docker compose-context dev up-d
更多信息请点击此处:我不清楚您的问题。你真的想通过docker compose在远程主机上部署一个容器吗?是的,就像一台docker机器,但我想在没有docker机器的情况下这样做。请看这篇文章:我不明白这个问题<代码>DOCKER\u主机=。。。docker compose u