Esta pergunta já foi respondida, mas aqui está uma informação adicional.
Não importa se você está no Arch ou em outra distribuição como o Fedora ou Ubuntu, o Docker usa um arquivo de soquete para se comunicar. Quando você executa docker
comandos, ele usa esse soquete para conversar com o daemon do Docker. Obviamente, o daemon deve estar em execução (e geralmente é desativado por padrão), mas se o usuário não puder acessar o soquete, também não poderá se comunicar com o daemon.
Você instalaria o Docker primeiro a partir do repositório da distribuição. Algumas pessoas fazem o download de um script de instalação e o direcionam para um shell ( curl ... | sh
), mas é recomendável instalá-lo no repositório para que ele possa ser atualizado facilmente.
Arco:
# pacman -S docker
Fedora:
# dnf install docker
Como mencionado acima, o daemon pode ser desativado por padrão. Se você deseja usar o Docker, o daemon deve estar em execução.
Habilite-o (para que seja iniciado na inicialização):
# systemctl enable docker
Inicie agora (ou reinicie):
# systemctl start docker
Agora, por padrão (se o grupo estivador estiver ausente), o soquete do Docker pertence à raiz:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
É por isso que um usuário comum não pode conversar com o daemon do docker. Um usuário comum não tem permissões suficientes para acessar o soquete. Não é possível acessar o daemon, portanto, assume que não está sendo executado e mostra este erro:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
É por isso que muitas pessoas simplesmente iniciam todos os comandos do Docker como root, usando sudo
. Mas, como descrito na outra resposta, o Docker tem seu próprio mecanismo para isso, portanto, o uso do sudo não é necessário.
Idealmente, um grupo chamado docker
é criado ao instalar o Docker. No entanto, se esse grupo não existir quando o daemon for iniciado, o arquivo de soquete pertencerá à raiz.
Em alguns casos, esse grupo costumava ter um nome diferente, como dockerroot
no Fedora . Verifique grep docker /etc/group
se existe um grupo no seu sistema. Se você já estiver usando esse grupo (seu usuário está nele), será necessário configurar o Docker para usá-lo:
Em /etc/sysconfig/docker
, adicione -G dockerroot
(nota: é uma solução alternativa, não a melhor solução):
OPTIONS='--selinux-enabled -G dockerroot'
Após reiniciar o daemon, seu usuário poderá acessar o soquete:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Caso contrário, a maneira oficial seria usar o grupo chamado docker
. Se existir, o Docker o utilizará automaticamente, ou seja, defina o grupo do soquete para esse grupo. Se não existir, tudo que você precisa fazer é criá-lo e reiniciar o daemon:
# groupadd docker
# systemctl restart docker
O arquivo de soquete pertencerá a esse grupo:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Seu usuário deve estar no docker
grupo para poder acessar o soquete:
# usermod -aG docker (user)
Pode ser necessário sair e fazer login novamente (ou su - (user)
), correr id
para ver se você está no grupo.
Você pode usar o Docker sem o sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Finalmente, uma palavra de aviso. Somente usuários confiáveis devem ter permissão para controlar seu daemon do Docker . Consulte https://docs.docker.com/engine/security/security/ .
(Mas é claro, o mesmo se aplica ao sudo - apenas usuários confiáveis devem estar no wheel
grupo.)