Dockerサービスは明らかに実行されています。
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
Docs: https://docs.docker.com
Main PID: 1015 (docker)
CGroup: /system.slice/docker.service
└─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root 1015 0.0 0.3 477048 12432 ? Ssl 2015 2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
ただし、Docker自体はそれに話すことを拒否します。
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
デフォルトのDocker構成 を実行しています。つまり、何も変更していません/etc
このサービスに関連するファイル。
ここで何が問題になるのでしょうか?
docker
グループに自分を追加 し、docker
コマンドを実行するために(ログアウトして再度ログインするか、newgrp docker
を実行して)グループをアクティブ化する必要があります。エラーメッセージは単に誤解を招くだけです。
この質問はすでに回答されていますが、ここに追加の情報があります。
ArchまたはFedoraやUbuntuなどの別のディストリビューションを使用している場合でも、Dockerはソケットファイルを使用して通信します。 docker
コマンドを実行すると、このソケットを使用してDockerデーモンと通信します。もちろん、デーモンは実行されている必要があります(デフォルトでは無効になっていることが多い)が、ユーザーがソケットにアクセスできない場合、デーモンと通信することもできません。
まず、ディストリビューションのリポジトリからDockerをインストールします。インストールスクリプトをダウンロードして、それをシェル(_curl ... | sh
_)にパイプする人もいますが、簡単に更新できるように、リポジトリからインストールすることをお勧めします。
アーチ:
_# pacman -S docker
_
Fedora:
_# dnf install docker
_
上記のように、デーモンはデフォルトで無効になっている場合があります。 Dockerを使用する場合は、デーモンが実行されている必要があります。
有効にします(起動時に開始されます)。
_# systemctl enable docker
_
今すぐ開始(または再起動):
_# systemctl start docker
_
これで、デフォルトで(dockerグループがない場合)、Dockerソケットはrootが所有します。
_# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
_
これが、通常のユーザーがdockerデーモンと通信できない理由です。一般ユーザーには、ソケットにアクセスするための十分な権限がありません。デーモンに到達できないため、実行されていないと想定し、次のエラーを表示します:_Cannot connect to the Docker daemon. Is the docker daemon running on this host?
_
これが、多くの人がSudo
を使用して、すべてのDockerコマンドをrootとして単に起動する理由です。ただし、他の回答で説明されているように、Dockerには独自のメカニズムがあるため、Sudoを使用する必要はありません。
理想的には、Dockerのインストール時にdocker
というグループが作成されます。ただし、デーモンの起動時にそのグループが存在しない場合、ソケットファイルはルートによって所有されます。
dockerroot
on Fedora のように、以前はそのグループに別の名前が付いていた場合があります。 _grep docker /etc/group
_をチェックして、システムにそのようなグループがあるかどうかを確認してください。そのグループをすでに使用している場合(ユーザーがそのグループに含まれている場合)、それを使用するようにDockerを構成する必要があります。
_/etc/sysconfig/docker
_に_-G dockerroot
_を追加します(注:これは回避策であり、最善の解決策ではありません)。
_OPTIONS='--selinux-enabled -G dockerroot'
_
デーモンを再起動すると、ユーザーはソケットにアクセスできるようになります。
_# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
_
それ以外の場合、公式な方法はdocker
というグループを使用することです。存在する場合、Dockerはそれを自動的に使用します。つまり、ソケットのグループをそのグループに設定します。存在しない場合は、作成してデーモンを再起動するだけです。
_# groupadd docker
# systemctl restart docker
_
ソケットファイルはそのグループによって所有されます。
_# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
_
ソケットにアクセスするには、ユーザーがdocker
グループに属している必要があります。
_# usermod -aG docker (user)
_
ログアウトしてから再度ログインする必要がある場合があります(またはsu - (user)
)。id
を実行して、グループに参加しているかどうかを確認します。
その後、Sudo/rootなしでDockerを使用できます。
_$ docker version --format '{{.Server.Version}}'
1.9.1
_
最後に、警告の言葉。 Dockerデーモンを制御できるのは信頼できるユーザーのみです 。 https://docs.docker.com/engine/security/security/ を参照してください。
(もちろん、Sudoについても同様です。信頼できるユーザーのみがwheel
グループに属している必要があります。)
Sudo usermod -aG docker [username]
次に、ログアウトしてから再度ログインします
Dockerエンジンを次のように起動した場合:Sudo service docker start
「docker」グループに自分を追加しても、通常のユーザーとは接続できません。
あなたは単にそれを停止することができます:Sudo service docker stop
そしてそれを通常のユーザーとして起動します:service docker start
Fedora 23またはRedhatのバリアントを使用している場合は、/etc/sysconfig/docker
を編集して以下を変更します
OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'
Dockerを再起動します。
このグループをシステムに追加し、自分をグループに追加してください。
Linuxシステムでこの問題を解決するための調査を行った後、この答えを書こうと思いました。これは私が問題を修正するためにしたことです。
Fedora 22の場合
Dockerのインストール:
$> curl -fsSL https://get.docker.com/ | sh
Dockerをインストールした後:
ユーザーをdockerグループに追加する必要があります。
$> Sudo usermod -aG docker
Dockerデーモンを起動する必要があります
$> Sudo service docker start
起動時にデーモンが起動するように設定できます
$> Sudo chkconfig docker on
Dockerサービスが実行されていることを確認できます
$> service docker status
そして最後の最後のチェック
$> docker run hello-world
このコマンドは私のために働きます
Sudo grep dwalsh /etc/sudoers
alias docker="Sudo /usr/bin/docker"
さらにドキュメントが必要な場合は、このページで解決策を見つけました。 非rootユーザーがCentOS、Fedora、またはRHELでDockerを実行できないようにする理由
これらは私が以下を修正するために従った手順です
_$ docker info
Cannot connect to the Docker daemon at
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
_
自分をdockerグループに追加する
_usermod -aG docker $USER
_
Docker sockerとコマンドの権限を修正しました。
_Sudo chgrp docker /usr/bin/docker
_
_Sudo chgrp docker /var/run/docker.sock
_
$ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*
_$ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock
_
Dockerコマンドの構成環境に変数を追加する
_export DOCKER_Host=unix:///var/run/docker.sock
_
Rest Docker
_Sudo systemctl restart docker
_
私も同じ問題を抱えていました。問題はdocker-daemonとdocker-clientに割り当てられたソケットにありました。
まず、docker.sockのdocker-clientに権限が設定されていません。Sudo usermod -aG docker $USER
を使用して設定できます
次に、docker-clientが実行されているbashファイルを確認します。私にとっては、0.0.0.0:2375に設定されていましたが、ドッカーデーモンはUNIXソケットで実行されていました。 (dockerdの構成ファイルで設定されています)。
問題のある行をコメントアウトするだけで問題なく動作します。
しかし、それをUnixソケットの代わりにTCPポートで動作させる場合は、dockerdの構成ファイルを変更し、0.0.0.0.2375に設定して、bashの行をそのままにします。存在する場合、または0.0.0.0:2375に設定します。