Не удается подключиться к демону Docker в macOS

Я обычно предпочитаю управлять своими приложениями на OSX с помощью brew

Я могу установить docker, docker-compose и docker-machine

docker --version
Docker version 17.05.0-ce, build 89658be
docker-compose --version
docker-compose version 1.13.0, build unknown
docker-machine --version
docker-machine version 0.11.0, build 5b27455

Я не загружал и не запускал приложение "Докер для Mac".

Однако, когда я пытаюсь бежать

> docker run -d -p 80:80 --name webserver nginx
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

Я уже проверил файл носка

ls -lah /var/run/docker.sock /var/tmp/docker.sock
ls: /var/run/docker.sock: No such file or directory
ls: /var/tmp/docker.sock: No such file or directory

Я также попробовал это предлагаемое решение: Доко sudo для Mac OS X Невозможно подключиться к демону Docker. Демон docker работает на этом хосте?

Но я получил это сообщение об ошибке:

$ eval $(docker-machine env default)
Host does not exist: "default"

Можно ли заставить Docker-сервис работать с помощью инструментов командной строки?

38 ответов

Решение
brew cask install docker

Затем запустите приложение Docker. Нажмите кнопку "Далее. Это попросит привилегированный доступ. Подтвердить. Значок кита должен появиться в верхней панели. Нажмите на нее и подождите, пока появится "Докер работает".

Вы должны быть в состоянии бежать docker Команды сейчас.

docker ps

На macOS docker Двоичный файл - это всего лишь клиент, и вы не можете использовать его для запуска демона docker, потому что демон Docker использует специфичные для Linux функции ядра, поэтому вы не можете запустить Docker в OS X. docker-machine для того, чтобы создать виртуальную машину и присоединиться к ней.

устанавливать docker-machine на macOS

Если у вас нет docker-machine пока нет команды, установите его одним из следующих способов:

  • Используя команду Brew: brew install docker-machine docker,
  • вручную:

    install -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine
    

Смотрите: Начало работы с Docker для Mac.

конфигурировать docker-machine на macOS

Создать default машина (если у вас ее нет, см.: docker-machine ls):

docker-machine create --driver virtualbox default

Затем настройте среду для клиента Docker:

eval "$(docker-machine env default)"

Затем перепроверьте, перечислив контейнеры:

docker ps

См. Начало работы с Docker Machine и локальной виртуальной машиной.


Связанные с:

Если вы, как и я, оказались здесь после Docker Desktop 4.13.0 , то это потому, что Docker избавился от/var/run/docker.sockсимволическая ссылка в поведении по умолчанию! См. примечания к выпуску здесь.

Быстрое исправление: скопируйте команду в разделе «Постоянное решение» ниже.

Проблема

Я столкнулся с работой (и другими клиентскими командами докера), но другие библиотеки, которые взаимодействуют с докером (например, CLI supabase), привели к:

      $ supabase start
Error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Решение

Теперь вам нужно сделать что-то вручную, чтобы ваши инструменты нашли настоящий файл сокета докера, который по умолчанию находится в~/Library/Containers/com.docker.docker/Data/docker.raw.sock.

Постоянное решение: Симлинк вручную

Это постоянное решение, которое «отменяет» это временное исправление.

      sudo ln -s ~/Library/Containers/com.docker.docker/Data/docker.raw.sock /var/run/docker.sock
DOCKER_HOST=unix:///var/run/docker.sock docker ps # test that it works using linked socket file

Временное решение: используйте DOCKER_HOST

Это временно заставит вашу команду использовать новый файл сокета

      DOCKER_HOST=unix:///Users/$(whoami)/Library/Containers/com.docker.docker/Data/docker.raw.sock docker ps

(заменяяdocker psс любой командой, которую вы хотите, напримерsupabase start)

Вы также можете заставить его работать в текущем сеансе терминала или вставить в свой.zshrcнавсегда, с:

      export DOCKER_HOST=unix:///Users/$(whoami)/Library/Containers/com.docker.docker/Data/docker.raw.sock

docker-machine теперь устарела, я нашел Colima отличной заменой, и вы можете легко подключить демон docker с помощью простой команды:

      brew install docker docker-compose colima
# make coffee
colima start

Готов к докеру:

      docker run hello-world

У меня была такая же проблема, я решил ее в следующие шаги:

docker-machine restart

Выйдите из терминала (или iTerm2, и т. Д. И т. Д.) И перезапустите

eval $(docker-machine env default)

Я также ответил здесь

У меня Mac OS и я открываю Launchpad и выберите docker приложение. от reset нажмите на вкладку restart,

Для меня перезапуск докера не помог. (Проверено как через терминал, так и через пользовательский интерфейс)

Опция ниже не была отмечена, поэтому я сделал ее отмеченной. После этого я смог запустить свой контейнер. Настройка -> Дополнительно -> Включен сокет Docker по умолчанию (требуется пароль).

Примечание. Для этого потребуются учетные данные администратора.

Попробуйте сделать это по умолчанию.

docker-machine create default

На OSX убедитесь, что вы запустили приложение Docker перед выдачей

docker ps

или же docker build... и т.д... да, это кажется странным и несколько вводящим в заблуждение, что выдача

docker --version

дает версию, даже если демон Docker не работает... То же самое для тех других версий cmds... Я только что столкнулся с точно такими же симптомами

Чтобы расширить другие ответы - потратив все утро на эту конкретную проблему, и ни один из других ответов не помог, наконец, я обнаружил, что докер пытается получить доступ к неправильному пути для docker.sock (!!), потому что несколько месяцев назад я установил colima.

Запуск этого помог мне переключиться обратно:

docker context use default

Мне помогло просто открыть Docker Desktop.

Установите миникуб и присоединяйтесь к темной стороне.

https://kubernetes.io/docs/tasks/tools/install-minikube/

$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

eval $(minikube docker-env)

$ docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate     -i /local/swagger.json     -l python     -o /local/test/
[main] INFO io.swagger.parser.Swagger20Parser - reading from /local/swagger.json
[main] WARN io.swagger.codegen.DefaultGenerator - 'host' not defined in the spec. Default to 'localhost'.

Отлично работает на Macbook Pro 2018 с bash v5. Не нужно устанавливать всю другую чушь докера в наши дни ИМО. Исходя из моего опыта, виртуальная машина и скрипт установки, поставляемый с мини-кубом, могут заменить докер.

Это помогло мне:

      open --background -a Docker

Занимает несколько секунд, пока вы не сможете подключиться к докеру.

Docker для Mac устарел. И вам не нужен Homebrew для запуска Docker на Mac. Вместо этого вы, вероятно, захотите установить Docker Desktop или, если он уже установлен, убедитесь, что он обновлен и работает, а затем снова попытайтесь подключиться к сокету.

Эта проблема:

$ brew install docker docker-machine
$ docker ps

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Очевидно, это означало сделать следующее:

$ docker-machine create default # default driver is apparently vbox:
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
$  brew cask install virtualbox
…
$ docker-machine create default 
# works this time
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ eval "$(docker-machine env default)"
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Наконец-то это работает.

Вы можете использовать драйвер "xhyve", если не хотите устанавливать виртуальный ящик. Также вы можете установить "докер-приложение" (а затем запустить его), что, по-видимому, делает его так, что вам не нужно запускать некоторые из вышеперечисленных. brew cask install dockerзатем запустите приложение, посмотрите другие ответы. Но, видимо, в этом нет необходимости.

У меня был докер в актуальном состоянии, докер сказал, что он работает, и диагноз был хорошим. Мне нужно было удалить некоторую переменную среды прежних версий (спасибо https://docs.docker.com/docker-for-mac/troubleshoot/)

unset DOCKER_HOST
unset DOCKER_CERT_PATH
unset DOCKER_TLS_VERIFY

В моем случае MacOS попросила меня предоставить докеру доступ для запуска сокета по умолчанию. Я отменил по ошибке. Однако в разделе дополнительных настроек я нашел настройку. После проверки и перезапуска докера проблема с разрешениями была решена.

Вам нужно выполнить скрипт для установки докера и запустить его из командной строки:

brew cask install docker
pip3 install docker-compose
open -a Docker
docker-compose ... 

после того docker-compose должно сработать

У меня такая же проблема. Докер работает, но не может получить к нему доступ через CLI.

Для меня проблема была решена с помощью "Docker Quickstart Terminal.app". Он находится в папке "/Applications/Docker/". Пока я работаю в этом приложении терминала, Docker работает отлично. Если требуется второе окно, мне нужно еще раз запустить приложение "Быстрый старт".

У меня есть установка Docker для Mac. Поэтому я не уверен, подходит ли мое решение для установки Homebrew.

Приложение "Docker Quickstart Terminal", по-видимому, представляет собой несколько скриптов для запуска приложения терминала и скрипт запуска bash, который инициализирует все необходимые переменные среды.

Надеюсь, это поможет кому-то еще!

У меня возникла аналогичная проблема на моем Mac, и я обнаружил, что докер не работает на моем компьютере, я просто зашел в приложения и вызвал кита, а затем он сработал.

Docker был разработан для работы в Linux. Однако он может работать на виртуальной машине в macOS. Сделать это немного неудобно, и, возможно, именно поэтому Docker Desktop существует в первую очередь. Но это не значит, что вы не можете пользоваться Docker, не выходя из командной строки на Mac.

Некоторые варианты для рассмотрения:

  1. Вы можете использовать лиму и добавить alias doocker='lima nerdctl'в свой профиль bash.
  2. Вы можете установить виртуальную машину Linux на свой компьютер и использовать ее вместо нее (не рекомендуется).
  3. Двойная загрузка Linux на Mac. Теперь поддерживаются даже машины с чипами T2 и M1.

Поскольку управление процессами в MacOS по своей сути затруднительно (в отличие от традиционных *nix ОС с такими вещами, как SystemD и init) Вам необходимо запустить приложение-бочонок в фоновом режиме, чтобы демон мог работать (и иметь легкий доступ к управлению).

brew install просто устанавливает утилиты CLI brew cask install предназначен для утилит GUI. Таким образом, когда вы устанавливаете Docker, вы должны предварительно выполнить ОБА установки, чтобы получить утилиту демона GUI и утилиту CLI. Я надеюсь, что это проясняет те, кто расстроился из-за того, что Brew не устанавливает обе версии по умолчанию!

Единственный хак, который у меня всегда работает даже на Mac Ventura 13.3.1:

      stop docker

Удалить носок докера

      sudo rm /var/run/docker.sock

Запустите докер еще раз.

У меня была аналогичная проблема. И, вероятно, мой конкретный случай/решение может помочь и другим.

Предпосылки:

У меня MacOS (чип M1) и установлено приложение Docker. Движок докера v20.10.23.

В моем конкретном случае я попытался запустить команду Spring-boot:build-image в Maven с IntelijIdea, чтобы создать образ Docker для службы.

В ответ я сказал -[2] No such file or directory

И в консоли IntelijIdea у меня было -[INFO] I/O exception (java.io.IOException) caught when processing request to {}->docker://localhost:2376: com.sun.jna.LastErrorException: [2] No such file or directory

Итак, сначала я запускаю терминал Mac. Он вернулся"Cannot connect to the Docker daemon at tcp://localhost:2376. Is the docker daemon running?"

Решение:

Поэтому я выполнил следующие шаги, как рекомендовано в других комментариях:

  1. запустить в терминалеbrew install --cask dockerВ ответе @friederbluemle выше объяснение следующее: «Поскольку docker — это пакет системного уровня, вы не можете установить его с помощью Brew install и вместо этого должны использовать --cask».

Полагаю, что изначально я установил Docker сbrew install, так что, вероятно, это была часть этой проблемы.

  1. запустите приложение Docker
  2. запустить в терминалеexport DOCKER_HOST=unix:///var/run/docker.sock

После этого, когда я запускаю терминалdocker ps, он вернул столбцы таблицыCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESи команда Spring-boot:build-image работает нормально.

Другим решением для меня (на Apple Silicon) была установка rancher или Podman, но у Podman возникли некоторые проблемы при импорте библиотек (т. е.paho_mqttдля Руста).

brew install rancher

Затем запустите приложение и выберите службу для запуска виртуальной машины.

С обновленной версией VirtualBox ( 6.1.32r149290), команда docker-machine create --driver virtualbox defaultне работает, есть ошибка с автоматически сгенерированным IP-адресом для виртуальной машины, объяснение здесь /questions/59402475/ya-poluchayu-soobschenie-ob-oshibke-pri-zapuske-vagrant-up/59541038#59541038 .

Эта команда помогла мне решить проблему: docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.59.3/24" default.

Я просто должен был запустить поиск Spotlight и запустить приложение Docker в папке /Applications, которая brew cask install создано. Как только это было выполнено, его попросили завершить установку. Я тогда смог бежать docker ps

Если вы столкнулись с этой проблемой с Lima в Mac OSX, убедитесь, что экземпляр Docker работает с использованием списка limactl. В моем случае экземпляр по умолчанию работал, но после перезагрузки докер не работал. Вы можете добавитьlimactl start dockerв вашу конфигурацию Shell, например~/.zshrc

      ➜ docker ps
Cannot connect to the Docker daemon at unix:///Users/xxxx/.lima/docker/sock/docker.sock. Is the docker daemon running?

➜ limactl list

NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
docker     Stopped    127.0.0.1:50310    qemu      x86_64    4       4GiB      100GiB    ~/.lima/docker

➜ limactl start docker

...(lima log output)

➜ limactl list

NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
docker     Running    127.0.0.1:50310    qemu      x86_64    4       4GiB      100GiB    ~/.lima/docker

➜ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Еще одно предложение (2023 г.), поскольку докер-машина устарела (2022 г.):

OrbStack (бесплатно для личного использования)

OrbStack — это быстрый, легкий и простой способ запуска контейнеров Docker и Linux. Разрабатывайте со скоростью света с помощью нашей альтернативы Docker Desktop.

  • Молниеносно: запуск за считанные секунды благодаря усиленной сети, плавной эмуляции Rosetta x86, совместному использованию файлов VirtioFS и другим оптимизациям для некоторых рабочих нагрузок.
  • Невероятно просто: замена Docker Desktop . Легко начните работу с компьютерами Linux за 1 минуту с помощью простого, но мощного приложения и командной строки.

Так:

Обычно я предпочитаю управлять своими приложениями на OSX с помощьюbrew

      brew install orbstack
docker run -p 80:80 docker/getting-started

Пробовал следующее, и теперь он работает нормально

      $ docker-machine create default
      (default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!

потом

      $ docker-machine env default

Ну наконец то

      $ eval $(docker-machine env default)
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
Другие вопросы по тегам