我想通过在docker
我的计算机上运行命令在服务器上运行 Docker 容器。我在服务器上安装
Ubuntu 18.04.3 (LTS) x64
,创建一个新的非 root 用户
root@server:~# useradd --create-home --shell /bin/bash unpriv
配置 SSH 并以非 root 用户身份连接到服务器
me@local:~# ssh unpriv@SERVER_IP
到安装无根 Docker通过运行
unpriv@server:~# curl -sSL https://get.docker.com/rootless | sh
根据脚本的输出告诉我,我添加
export PATH=/home/unpriv/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock
,然后/home/unpriv/.bashrc
我重新资源
unpriv@server:~# source .bashrc
然后启动 Docker 服务
unpriv@server:~# systemctl --user start docker
现在我可以从 SSH 会话运行 Docker 容器
unpriv@server:~# docker run --rm hello-world
但是,如果我设置
me@local:~# export DOCKER_HOST=ssh://unpriv@SERVER_IP
在我的计算机上尝试运行容器,出现错误
me@local:~# docker run --rm hello-world
docker: error during connect: Post http://docker/v1.40/containers/create: command [ssh -l unpriv 161.35.202.145 -- docker system dial-stdio] has exited with exit status 127, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=bash: docker: command not found
.
See 'docker run --help'.
我认为添加的环境变量PATH
和DOCKER_HOST
我home/unpriv/.bashrc
在服务器上添加的环境变量没有被考虑。因此,docker
找不到该命令(在服务器上)。我的配置中缺少什么?
答案1
感谢@BMitch。我在最后添加了环境变量,但应该在开头添加它们/home/unpriv/.bashrc
,例如在
# If not running interactively, don't do anything
[ -z "$PS1" ] && return