この質問はすでに回答されていますが、追加情報があります。
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?
これが、多くの人が単にを使用してすべてのDockerコマンドをrootとして起動する理由sudo
です。ただし、他の回答で説明したように、Dockerには独自のメカニズムがあるため、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
。信頼できるユーザーのみがグループに参加する必要があります。)