Можете ли вы запустить Docker изначально в новом пользовательском пространстве Windows 10 (Ubuntu) bash?

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

Недавно Microsoft объявила бета-версию Ubuntu linux пользовательского режима , изначально работающего в Windows 10. Это может запускать двоичные файлы, скомпилированные в формате ELF в Windows (в отличие от cygwin, который требует компиляции.)

Мой вопрос: Можете ли вы запустить Docker изначально в новом пользовательском пространстве Windows 10 (Ubuntu) bash?

126
задан 4 April 2016 в 13:16
10 ответов

Вы можете использовать Docker Desktop для Windows в качестве движка и Docker для Linux в качестве клиента в WSL в Ubuntu / Debian в Windows. Подключите их через TCP.

Установите Docker Desktop для Windows: https://hub.docker.com/editions/community/docker-ce-desktop-windows Если вы хотите использовать контейнеры Windows вместо контейнеров Linux, контейнеры обоих типов могут управляться клиентом докеров Linux в пользовательском пространстве bash.

Начиная с версии 17.03.1-ce-win12 (12058), вы должны установить флажок Expose daemon на tcp: // localhost: 2375 без TLS , чтобы позволить клиенту Linux Docker продолжить связь с демоном Windows Docker по TCP

Выполните следующие действия:

cd
wget https://download.docker.com/linux/static/stable/`uname -m`/docker-19.03.1.tgz
tar -xzvf docker-*.tgz
cd docker
./docker -H tcp://0.0.0.0:2375 ps

или

env DOCKER_HOST=tcp://0.0.0.0:2375 ./docker ps

Чтобы сделать его постоянным:

mkdir ~/bin
mv ~/docker/docker ~/bin

Добавьте соответствующие переменные в .bashrc

export DOCKER_HOST=tcp://0.0.0.0:2375
export PATH=$PATH:~/bin

Конечно, вы можете установить docker-compose

sudo -i
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

или используя python pip

sudo apt-get install python-pip bash-completion
sudo pip install docker-compose

и завершение Bash. Лучшая часть:

sudo -i
apt-get install bash-completion
curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker > /etc/bash_completion.d/docker
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

Я тестировал его с помощью версии 2.1.0.1 (37199) Docker Desktop с использованием Hyper-V:

$ docker version
Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89e8a
 Built:             Thu Jul 25 21:17:37 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
Look both client and server say **OS/Arch: linux/amd64**

Volumes

Будьте осторожны при добавлении томов. Путь C: \ dir будет виден как / mnt / c / dir на WSL и как / c / dir / движком докера. Вы можете преодолеть это навсегда:

sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

Вы должны выйти и перезагрузить WSL после внесения изменений в wsl.conf, чтобы WSL считывал ваши изменения при запуске.

ОБНОВЛЕНИЕ

от: Что нового в команде Строка в Windows 10 версии 1803

Unix Sockets Сокеты Unix не поддерживались в Windows, и теперь они есть! Вы также можете общаться через сокеты Unix между Windows и WSL. Одна из замечательных особенностей этого состоит в том, что он позволяет WSL запускать Linux Docker Client для взаимодействия с Docker Daemon, работающим в Windows.

ОБНОВЛЕНИЕ

Этот сценарий и использование сокетов Unix было включено в настройку pengwin Pengwin .

С уважением

104
ответ дан 28 November 2019 в 19:19

Вчера была выпущена первая предварительная версия для инсайдеров. Я попытался установить докер, но это не удалось: docker fail

Похоже, что для первого предварительного просмотра он в настоящее время не работает. Однако, как предполагали многие, он может работать в будущем выпуске.

13
ответ дан 28 November 2019 в 19:19

Нет, это невозможно.

Docker нуждается в нескольких вещах для запуска контейнеров:

  • chroot
  • Namespaces за:
    • PID
    • Пользователи
    • Сеть
    • Монтирует
    • UTS
    • IPC

Все эти функции ядра реализованы в Linux. К сожалению, у большинства из них нет аналогичной функции в Windows для использования в качестве замены (ни в подсистеме Linux, которую Microsoft реализовала в ядре Windows). Все это должно быть обеспечено ОС.

13
ответ дан 28 November 2019 в 19:19

Docker в настоящее время не работает в текущей сборке (14316) - если вы можете установить его.

root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict
2
ответ дан 28 November 2019 в 19:19

На данный момент (апрель 2016 г.) ответ следующий:

Мы еще не знаем (но, вероятно, нет).

Факты

  • Windows 10 может теперь запускают различные программы Linux (среди их оболочка Bash и различные текстовые утилиты). Это не порты (т.е. перекомпилированные версии, как, например, в Cygwin ), они те же двоичные файлы ELF , которые работают в типичной системе Linux. В В данном случае они были взяты из Ubuntu.
  • Чтобы сделать это возможным, Windows 10 была модифицирована для приема системных вызовов Linux (syscalls), а также для возможности загрузки и запуска двоичных файлов ELF ( комментарий Скотта Хансельмана ]). Это означает, что могут быть запущены неизмененные исполняемые файлы Linux, они будут загружать свои неизмененные общие библиотеки по мере необходимости, а Windows будет запускать их как процессы Windows.
  • Всякий раз, когда такая программа Linux хочет взаимодействовать с ядром, она выдает системный вызов (или позволяет библиотеке делать это). Это (предположительно) единственное отличие от работы в Linux: при работе в Linux ядро ​​Linux обрабатывает эти вызовы; в Windows 10 это делает ядро ​​Windows 10.

Предположение

Итак, вопрос в том, были ли реализованы системные вызовы, необходимые Docker (среди прочего, для chroot и пространств имен), или нет. Ответ - скорее всего, «нет». Docker требует довольно сложных (и специфичных для Linux) функций для управления процессами и ресурсами, а также изоляции процессов. Хотя, вероятно, можно воспроизвести все это в Windows, это потребует много работы, и поскольку целью этой функции Windows, похоже, является запуск программ пользовательского пространства Linux, маловероятно, что они сделали всю работу (и держали ее в секрете) .

Однако, насколько я могу судить, окончательной информации в любом случае нет.

Существующие порты Docker

Конечно, если Microsoft решит, что им нужна поддержка Docker в Windows 10, они, вероятно, смогут предложить Это. Есть прецедент переноса Docker на другое ядро:

  • Существует порт Docker для FreeBSD . Он помечен как «экспериментальный», но, похоже, в принципе работает. Он может использовать немодифицированные контейнеры Docker из репозитория Docker, то есть фактически предоставляет Linux-подобную среду хоста для образов.
  • В стадии реализации находится проект по переносу Docker на Windows (в частности, Windows Server 2016) - см. Запись в блоге Docker от августа 2015 года. Однако, в отличие от порта FreBSD, описанного выше, это будет порт, который позволит Docker запускать образы Windows в Windows, а не образы Linux в Windows. Спасибо Рори МакКьюну за указание на это.
51
ответ дан 28 November 2019 в 19:19

После выпуска Docker 1.12 и отделения клиента Linux Docker вы сможете запустить клиент docker ] в Windows 10 bash.

Это может показаться не таким уж большим, учитывая, что у вас есть клиент Docker для Windows, но это полезно, если у вас есть наборы инструментов Linux, которые включают докер для его функций на стороне клиента.

6
ответ дан 28 November 2019 в 19:19

I ka Windows 10 Mana 1607 Kūkulu i ka 1493.10 hiki iā ʻoe ke hoʻokau pono iā ia ma Ubuntu Bash, akā ʻaʻole holo pono : (

E haʻi kahi "docker mana" maʻalahi iā ʻoe:

Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.18/version: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS?

Inā holo ʻoe i "sudo docker -d" loaʻa iā ʻoe kēia hewa:

FATA[0000] ERROR: You are running Linux kernel version 3.4.0+, which is unsupported for running Docker. Please upgrade your kernel to 3.8+.

No laila he paʻa paʻa kēia mai ka ʻaoʻao bash.

Eia nō naʻe, hiki iā ʻoe ke hoʻouka Docker no Windows a hana ia e like me ka mea hoʻonanea, hiki iā ʻoe ke hoʻokaʻawale i nā Linux Servers a me nā mea āpau āu e makemake ai.

> docker version
Client:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 21:15:28 2016
 OS/Arch:      windows/amd64

Server:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 21:15:28 2016
 OS/Arch:      linux/amd64
4
ответ дан 28 November 2019 в 19:19

От: https://blog.docker.com/2016/07/docker-for-mac-and-windows-production-ready/

Faster and more reliable – native development environment using
hypervisors built into each operating system. (No more VirtualBox!)
1
ответ дан 28 November 2019 в 19:19

Am September 2016, Nr

All aktuell Implementéierunge vun Docker op Windows benotze Virtualiséierung, Docker 1.12 benotzt en Hypervisor am Windows - doduerch datt de Virdeel vun der Containeriséierung iwwer d'Virtualiséierung ewechgeholl gëtt.

Docker brauch méi wéi just Linux Systemanruffe benotzt.

Et brauch Prozesskontrollgruppen (cgroups), e stackbar Dateiesystem (aufs), plus aner Linux-baséiert Systemer ausserhalb vum Kernel.

Weder Cgroups nach aufs sinn natierlech an der Windows 10 Kernel.

Et gëtt eng Implementatioun vu Windows Server 2016 hei: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server .. awer dëst wäert nëmmen lafen e puer Windows Servicer, z IIS, an net Ubuntu

3
ответ дан 28 November 2019 в 19:19

Начиная с Creator Update (публично выпущенного 13 июня 2017 г.) вы можете запускать собственный исполняемый файл Windows непосредственно в WSL. Это означает, что если вы уже установили Docker для Windows , вы можете просто вызвать двоичные файлы докера , установленные в C: \ Program Files . Поскольку они заканчиваются на .exe , самым простым вариантом является создание псевдонимов.Примерно следующее в вашем .bashrc должно работать:

DOCKER_BIN='/mnt/c/Program Files/Docker/Docker/resources/bin'
for f in "$DOCKER_BIN"/*; do
  alias "$(basename "$f" | sed 's/.exe$//')"'="'"$f"'"'
done

Это создает псевдонимы для всех файлов в каталоге DOCKER_BIN :

$ type docker
docker is aliased to `"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'

$ docker --version
Docker version 17.03.1-ce, build c6d412e

Одно предостережение: вы получите сообщение об ошибке сообщение типа « Невозможно преобразовать текущий рабочий каталог » при запуске из каталога Linux. Просто cd в каталог Windows (например, / mnt / c / Users / YourUsername ), и все будет хорошо.

7
ответ дан 28 November 2019 в 19:19

Теги

Похожие вопросы