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との会話を拒否します。
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
私は走っている基本ドッカーの設定/etc
つまり、このサービスに関連するファイルを変更していません。
ここで何が間違っている可能性がありますか?
答え1
この質問はすでに回答されていますが、ここに追加情報があります。
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グループがない場合)。
# 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
理想的には、Dockerをインストールすると、名前付きグループが作成されます。ただし、デーモンの起動時にグループが存在しない場合、ソケットファイルはルートが所有します。
場合によっては、グループが別の名前を持っていたことがありました。dockerroot
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
必要があります。)
答え2
あなたはする必要がありますdocker
グループに自分を追加するコマンドをnewgrp docker
実行するには、ログアウトして再度ログインするか、を実行してグループをアクティブにします。docker
エラーメッセージは単に誤解を招く。
答え3
私のLinuxシステムでこの問題を解決するために調査した後、この答えを書く必要があると思いました。問題を解決するために私がしたことは次のとおりです。
Fedora 22から
ドッカーをインストールします。
$> curl -fsSL https://get.docker.com/ | sh
Dockerをインストールした後:
ユーザーをdockerグループに追加する必要があります。
$> sudo usermod -aG docker
ドッカーデーモンを起動する必要があります
$> sudo service docker start
起動時にデーモンが起動するように設定できます。
$> sudo chkconfig docker on
dockerサービスが実行されていることを確認できます。
$> service docker status
最後の確認
$> docker run hello-world
答え4
このコマンドは私にとって効果的でした。
sudo grep dwalsh /etc/sudoers
alias docker="sudo /usr/bin/docker"
さらにドキュメントが必要な場合は、このページで解決策を見つけました。 root以外のユーザーがCentOS、Fedora、またはRHELでDockerを実行することを許可しない理由