Виртуальная машина Docker на OS X установлена, но команды, похоже, не выполняются

Я настраиваю Docker на своем локальном компьютере Mac OS X и сталкиваюсь с некоторыми проблемами, заставляющими его работать. Я следовал инструкциям по установке на https://docs.docker.com/installation/mac/. Кажется, что все, вплоть до установки инструмента boot2docker, проходит гладко, но после запуска виртуальной машины команды Docker, похоже, ничего не делают. Например.,

$ docker run ubuntu echo hello world2014/06/17 08:20:54 Post http://localhost:4243/v1.12/containers/create: EOF

Каждая команда заканчивается на EOF и, похоже, не делает того, что она на самом деле должна делать. Вот еще один:

$ docker ps2014/06/17 08:25:10 Get http://localhost:4243/v1.12/containers/json: EOF

Виртуальная машина, созданная с помощью инструмента boot2docker, также запущена:

$ boot2docker status[2014-06-17 08:26:24] boot2docker-vm is running.

У меня такое чувство, что что-то настроено неправильно, но я следовал инструкциям строка за строкой и не вижу, где что-то идет не так.

Любая помощь очень ценится, спасибо!

Обновление 1

версия boot2docker: 1.0.0 или 0.9.1 (не уверен - там нет флага версии AFAICT)

$ boot2docker ipUsage /usr/local/bin/boot2docker {init|start|up|save|pause|stop|restart|status|info|delete|ssh|download}

На экземпляре boot2docker:

$ sudo netstat -ntpl | grep dockertcp        0      0 :::2375                 :::*                    LISTEN      743/docker$ docker --versionDocker version 1.0.0, build 63fe64c

Обновление 2

Я только что переустановил boot2docker, и теперь я определенно работает 1.0.0.

$ boot2docker versionClient version: v1.0.0Git commit: 2fef7b2

Я также повторно запустил команду в документации (которая противоречит тому, что команда сказала мне установить DOCKER_HOST в командной строке, см. Ниже):

$ boot2docker up2014/06/17 18:25:43 Waiting for VM to be started................................2014/06/17 18:26:41 Started.2014/06/17 18:26:41 Auto detection of the VM's IP address.2014/06/17 18:26:41 To connect the Docker client to the Docker daemon, please set:2014/06/17 18:26:41     export DOCKER_HOST=tcp://:4243

Но я все еще вижу исходную проблему.

$ docker run ubuntu echo hello world2014/06/17 18:28:29 Post http://127.0.0.1:4243/v1.12/containers/create: EOF

Затем я повторно запускаю команду, упомянутую в документации:

$ export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375

А теперь посмотрите на это:

$ docker run ubuntu echo hello world2014/06/17 18:31:39 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

Я должен упомянуть, что попытка бежать docker -d в OS X выдает это сообщение:

$ docker -d2014/06/17 18:34:04 The Docker daemon is only supported on linux

Что не очень-то помогает...

Пара вещей, которые нужно проверить:

Обновленная версия boot2docker

Убедитесь, что ваш boot2docker обновлен. Если вы установили его с помощью такого приложения, как Homebrew, возможно, вы используете более старую версию. Ознакомьтесь с официальными релизами по адресу https://github.com/boot2docker/osx-installer/releases. Обязательно запустите boot2docker delete и затем boot2docker init после обновления.

Обновленный клиент Docker

Вероятно, хорошей идеей будет запустить клиент Docker, который соответствует версии сервера, запущенного в boot2docker. Если вы используете Docker 1.0 в boot2docker, убедитесь, что у вас есть клиент 1.0 из https://github.com/boot2docker/osx-installer/releases.

Экспортируйте правильный порт

Порт в ваших командах может быть неправильным. Ты не забыл, что нужно бежать export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375 как говорится в документации? Порт 2375 это новое значение по умолчанию для Docker 1.0 (которое есть как в boot2docker 0.9.1, так и в 1.0.0).

Перенаправить правильный порт

После обновления DOCKER_HOST что касается клиента, вы можете столкнуться с проблемой с boot2docker 0.9.1, который использовал неправильный порт для TCP-соединений Docker. Шаги для проверки:

  1. Войдите в виртуальную машину boot2docker с помощью boot2docker ssh (пароль - это tcuser).
  2. Затем проверьте порт прослушивания с помощью sudo netstat -ntpl | grep docker (вероятно 2375).
  3. Теперь откройте VirtualBox, перейдите к настройкам виртуальной машины boot2docker, затем нажмите Port Forwarding кнопка.
  4. Он должен соответствовать порту, прослушиваемому в boot2docker (возможно 2375).
  5. Если порт не совпадает, попробуйте обновить переадресацию портов, затем повторите попытку подключения клиента.

Энди помог мне пройти 99% пути туда. Я отмечаю его ответ как принятый ответ, но я напишу здесь, что решило мою проблему. После установки правильной версии (1.0.0) boot2docker я все еще получал неверные выходные данные из любых команд Docker.

Затем я открыл VirtualBox и прочитал порты, и, о чудо, порты были неверными. Однако переключение их на правильные значения не устранило проблему.

Я решил сбросить виртуальную машину, так как старый boot2docker, вероятно, настроил ее неправильно. Следующие команды в конечном итоге устранили проблему.

$ boot2docker delete$ boot2docker init$ export DOCKER_HOST=tcp://:2375

Почему это не по теме? Мне кажется, это вполне обоснованный вопрос. Я столкнулся с подобными проблемами.

Я этого не осознавал. Но я предполагаю, что когда они говорят “профессиональный”, они имеют в виду больше проблем с “производственной системой”. Поскольку вы спрашиваете о запуске контейнеров на Mac, они должны предположить, что это среда разработки. Этот вопрос, возможно, был бы лучше для переполнения стека. У меня всегда было впечатление, что ошибка сервера была связана с вопросами, связанными с сервером и демоном, где переполнение стека было больше основано на коде. Но я думаю, что мои предположения были немного ошибочны.

Не могли бы вы предоставить немного больше информации об отладке? по крайней мере, версия boot2docker? Может быть, также подключиться по SSH к виртуальной машине boot2docker и получить вывод docker -version? Я подозреваю, что это проблема с переадресацией портов виртуальной машины с последней версией boot2docker, обновленной до Docker 1.0, которая использует новый порт.

Также похоже, что ваш клиентский порт неверен (по крайней мере, для Docker 1.0). Я создал ответ с двумя возможными проблемами, которые могут возникнуть.

@AndyShinn по-видимому, задавать вопрос о “среде разработки” является основанием для закрытия. Думаю, нужно задаться вопросом, где можно задавать подобные вопросы, не закрываясь…