我希望能够使用远程守护程序来使用docker-compose
。我创建了一个远程守护进程套接字的本地转发,如下所示:
#!/bin/sh
export SOCKET_DIR=$HOME/.remote-sockets
mkdir -p $SOCKET_DIR
echo "Creating SSH Dokcer Socket Tunnel"
socat "UNIX-LISTEN:/$SOCKET_DIR/docker.sock,reuseaddr,fork" \
EXEC:'ssh freebsd@107.170.216.79 socat STDIO UNIX-CONNECT\:/var/run/docker.sock'
运行该脚本后,我导出以下环境变量:
DOCKER_API_VERSION 1.19
COMPOSE_API_VERSION 1.19
DOCKER_HOST unix://$HOME/.remote-sockets/docker.sock
设置了这些变量后,我可以验证运行docker ps
是否向我显示了远程容器,而不是我本地守护程序的容器。此外,docker-compose ps
似乎也连接到远程守护进程,因为它返回一个空列表。如果我关闭了SSH隧道,它就无法说它无法连接到docker守护程序。
问题是当我尝试运行docker-compose up
时。我也试过docker-compose -H unix://$HOME/.remote-sockets/docker.sock up
。这两个命令都给了我以下内容:
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.
本地版本:
Docker version 1.11.0, build 4dc5990
docker-compose version 1.8.0, build 94f7016
(Gentoo Linux)
远程版本:
Docker version 1.7.0-dev, build 582db78
(FreeBSD 11.0-RELEASE-p1)
为什么当其他命令与其进行通信时,为什么不会docker-compose up
使用不同的套接字?