以下では,rootless Dockerをインストールしたリモートサーバーの,ユーザー名はmt
,ホスト名はmt-server.local
とします.
DockerコマンドのPATHの追加
% docker version error during connect: Get "http://docker.example.com/v1.24/version": command [ssh -l mt -- mt-server.local 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
"bash: docker: command not found" と表示されているので,dockerコマンドが見つからないようです.試しに,
% ssh -l mt -- mt-server.local docker
と実行すると同じエラーが表示されました.rootless Dockerの場所を環境変数PATH
に追加します.以下のコマンドで環境変数が変更されたことを確認します.
% ssh -l mt -- mt-server.local env
パスを追加したい〜.bashrc編〜 - ITmedia エンタープライズ
環境変数$DOCKER_HOST
の設定
% ssh -l mt -- mt-server.local docker system dial-stdio failed to open the raw stream connection: dial unix /var/run/docker.sock: connect: no such file or directory
どうやらrootless Dockerでは,環境変数$DOCKER_HOST
が設定されていないと上記のエラーが出るみたいです.
Run the Docker daemon as a non-root user (Rootless mode) | Docker Documentation
非ログインシェルで .bashrcの環境変数が読み込まれない
色々なサイトで紹介されていますが,デフォルトの.bashrcには以下の行が存在するので,この行より上に記載しなければなりません.
# If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
bash - Why does bashrc check whether the current shell is interactive? - Unix & Linux Stack Exchange
bashの初期化ファイルには .profile .bashrc, .bash_profileなどがあり,状況によって読み込まれるファイルが異なるので注意が必要です.以下のサイトが詳しいです.
bash の初期化ファイル .profile, .bashrc, .bash_profile の使い分けと管理方針 - A Memorandum
結論
リモートサーバーのrootless Dockerを実行するユーザーの~/.bashrcを以下のような内容にします.
# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples export DOCKER_HOST=unix:///run/user/1000/docker.sock PATH="$PATH":/home/mt/bin