monitor_docker icon indicating copy to clipboard operation
monitor_docker copied to clipboard

Support connecting to docker host via ssh

Open Gibby opened this issue 4 years ago • 3 comments

Per https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option starting in Docker version 18.09 the following can be used to connect to a remote docker host:

$ docker -H ssh://[email protected]:22 ps
$ docker -H ssh://[email protected] ps
$ docker -H ssh://example.com ps

When I tried to specify ssh://[email protected] in the URL, I get the following error:

2020-10-07 12:33:25 ERROR (Thread-6) [custom_components.monitor_docker.helpers] Can not connect to Docker API (Missing protocol scheme in docker_host.)                                                       
Traceback (most recent call last):
  File "/config/custom_components/monitor_docker/helpers.py", line 140, in __init__                    
    self._api = aiodocker.Docker(url=url)
  File "/usr/local/lib/python3.8/site-packages/aiodocker/docker.py", line 125, in __init__             
    raise ValueError("Missing protocol scheme in docker_host.")                                        
ValueError: Missing protocol scheme in docker_host. 

Gibby avatar Oct 07 '20 16:10 Gibby

The underlying library used for the Docker API doesn't support the "ssh://" option, sorry. You need to use tcp with certificates for security.

ualex73 avatar Oct 07 '20 17:10 ualex73

I was able to work around this limitation using socat over SSH.

Instructions here: https://serverfault.com/a/362833

Just incase anyone else is in a similar situation

Garulf avatar May 28 '21 09:05 Garulf

For a bit more convenience, I created a systemd daemon

Do everything as root. location: /etc/systemd/system/[email protected]

Description=Setup a secure tunnel for docker.sock to %i
After=network.target

[Service]
Group=docker
ExecStart=ssh -o StreamLocalBindUnlink=yes -o StreamLocalBindMask=0117 -nNT -L /var/run/docker.%i.sock:/var/run/docker.sock %i

RestartSec=30
Restart=always

[Install]
WantedBy=multi-user.target

Enable it on boot with systemctl enable docker-remote-sock@server Be sure you have placed the id_rsa.pub into the authorized_keys file for the root of the other server, so no login is needed.

SciLor avatar Jan 23 '23 11:01 SciLor