Попробуйте запустить sudo chown $ (whoami) ~
, а также sudo chmod -R u = rwx ~
. Это должно сделать ваш домашний каталог принадлежащим вам и предоставить вам все разрешения.
После проведения некоторых исследований по решению этой проблемы в моей системе 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
На этот вопрос уже был дан ответ, но вот дополнительная информация.
Независимо от того, используете ли вы Arch или другой дистрибутив, такой как Fedora или Ubuntu, Docker использует файл сокета для связи. Когда вы запускаете команды docker
, он использует этот сокет для взаимодействия с демоном Docker. Конечно, демон должен быть запущен (и он часто отключен по умолчанию), но если ваш пользователь не может получить доступ к сокету, он также не сможет взаимодействовать с демоном.
Сначала вы должны установить Docker из репозитория дистрибутива. Некоторые люди загружают сценарий установки и направляют его в оболочку ( curl ... | sh
), но рекомендуется установить его из репозитория, чтобы его можно было легко обновить.
Arch:
# pacman -S docker
Fedora:
# dnf install docker
Как упоминалось выше, демон может быть отключен по умолчанию. Если вы хотите использовать Docker, демон должен быть запущен.
Включите его (чтобы он запускался при загрузке):
# systemctl enable docker
Запустить сейчас (или перезагрузить):
# systemctl start docker
Теперь по умолчанию (если группа докеров отсутствует) сокет Docker принадлежит пользователю root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
Вот почему обычный пользователь не может разговаривать с демоном докера. Обычный пользователь не имеет достаточных разрешений для доступа к сокету. Он не может связаться с демоном, поэтому предполагает, что он не запущен, и выдает следующую ошибку: Не удается подключиться к демону Docker. На этом хосте запущен демон Docker?
Вот почему многие люди просто запускают все команды Docker от имени пользователя root, используя sudo
.Но, как описано в другом ответе, у Docker есть собственный механизм для этого, поэтому использовать sudo нет необходимости.
В идеале при установке Docker создается группа под названием docker
. Однако, если эта группа не существует при запуске демона, файл сокета принадлежит пользователю root.
В некоторых случаях эта группа имела другое имя, например 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 будет автоматически использовать его, то есть установит группу сокета для этой группы. Если он не существует, все, что вам нужно сделать, это создать его и перезапустить демон:
# 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 - (пользователь)
), запустите id
, чтобы проверить, ' повторно в группе.
Затем вы можете использовать Docker без sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Наконец, одно предупреждение. Только доверенным пользователям должно быть разрешено управлять вашим демоном Docker . См. https://docs.docker.com/engine/security/security/ .
(Но, конечно, то же самое верно и для sudo - только доверенные пользователи должны быть в группе wheel
.)
sudo usermod -aG docker [имя пользователя]
затем выйдите из системы и снова войдите в систему
У меня тоже была такая же проблема. Проблема заключалась в сокетах, выделенных для docker-daemon и docker-client.
Во-первых, для docker-client в docker.sock не установлено разрешение. Вы можете установить его с помощью sudo usermod -aG docker $ USER
Затем проверьте свой файл bash, в котором запущен docker-client. Для меня он был установлен на 0.0.0.0:2375, в то время как docker-daemon работал на сокете unix. (Он был установлен в конфигурационном файле dockerd).
Просто закомментируйте оскорбительную строку, и все будет нормально.
Но если вы хотите, чтобы он работал на TCP-порте вместо unix-сокета, измените файл конфигурации dockerd, установите его на 0.0.0.0.2375 и оставьте строку в bash такой, как она есть, или установите ее. до 0.0.0.0:2375.
Если вы используете Fedora 23 или вариант Redhat, отредактируйте / etc / sysconfig / docker
и измените следующее
OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'
Окно настройки перезапуска.
Убедитесь, что вы добавили эту группу в систему и добавили себя в группу.
Эта команда работает для меня
sudo grep dwalsh /etc/sudoers
alias docker="sudo /usr/bin/docker"
Я нашел решение на этой странице, если вам нужна дополнительная документация. Почему мы не позволяем пользователям без полномочий root запускать Docker в CentOS, Fedora или RHEL
Если вы запустили свой движок docker с помощью: sudo service docker start
вы не можете подключиться с обычным пользователем, даже если вы добавили себя в группу 'docker'.
Вы можете просто остановить его с помощью: sudo service docker stop
и запустить его как обычный пользователь: service docker start
Вот шаги, которые я выполнил, чтобы исправить следующее
$ docker info
Cannot connect to the Docker daemon at
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
Добавьте себя в группу докеров
usermod -aG docker $USER
Исправлены разрешения для сокета и команды docker.
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
Докер отдыха
sudo systemctl restart docker