سؤال هل يمكنك تشغيل Docker أصلاً على مستخدمي Windows bash (Windows 10 (Ubuntu))؟


كان فهمي أن التقييد الأساسي لتشغيل عامل الميناء على أنظمة تشغيل أخرى كان حاويات شبكة Linux التي جعلت ذلك ممكنًا. (بالتأكيد لأجهزة ماكينتوش).

مؤخرا أعلنت شركة مايكروسوفت بيتا من أ أوبونتو لينكس وضع المستخدم تشغيل natively على Windows 10. يمكن تشغيل هذا الثنائيات المجمعة بتنسيق ELF على Windows (على عكس cygwin الذي يتطلب تجميع.)

سؤالي هو: هل يمكنك تشغيل Docker أصلاً على مستخدمي Windows bash (Windows 10 (Ubuntu))؟


121
2018-04-04 10:16


الأصل


انها ليست "فقط" أ bash مساحة المستخدم. إنها مساحة حقيقية تمامًا لمستخدمي Linux ، ولكن بدون X Windows ، أي النص فقط. قول "bash" يربط القيد النص فقط بشكل جيد .. - MSalters
هل اشتقت لشيء ما؟ هل حصل هذا بالفعل على توزيع؟ في هذه اللحظة أنا أعرف ذلك فقط باعتباره vaporware. - Michael Hampton♦
أعتقد أنه لن يكون واضحا حتى يقوموا بإصدار هذا (AFAIK غير متوفر حتى لمستخدمي windows حتى الآن) لكن تجدر الإشارة إلى أن Microsoft و Docker يعملان على إحضار Docker إلى Windows أصلا ، ليتم إصداره إلى جانب Windows server 2016 - Rоry McCune
@ RоryMcCune: مثيرة للاهتمام. ومع ذلك ، وفقا ل هذا بلوق دوكر دخول من أغسطس 2015 ، سيكون هذا المنفذ الذي يسمح بتشغيل Docker شبابيك الصور على ويندوز ، وليس صور لينكس على ويندوز. - sleske
في الواقع هذا هو الغرض من رصيف السفن الأصلي ويندوز. تتمثل طبيعة الحاوية في أنه لا يمكنك تشغيل أنظمة مع حبيبات أخرى ، دون إضافة بعض المحاكاة الافتراضية أو (ربما) هذا النظام الفرعي الجديد الذي تقوم Microsoft بتطويره - Rоry McCune


الأجوبة:


اعتبارًا من الآن (أبريل 2016) الإجابة هي:

نحن لا نعرف حتى الآن (ولكن ربما لا).

الحقائق

  • يستطيع Windows 10 الآن تشغيل مجموعة متنوعة من برامج Linux (من بين لهم قذيفة باش ومختلف المرافق النص). هذه ليست منافذ (على سبيل المثال النسخ المترجمة ، على سبيل المثال في سيغوين)، هم انهم نفس الشيء ثنائيات ELF التي تعمل على نظام لينكس نموذجي. في هذه الحالة ، تم أخذهم من أوبونتو.
  • لجعل ذلك ممكنًا ، تم تعديل نظام Windows 10 لقبول مكالمات نظام Linux (syscalls) ، ولكي يتمكن من تحميل وتشغيل ثنائيات ELF (تعليق بواسطة سكوت هانسلمان). وهذا يعني أنه يمكن تشغيل ملفات Linux غير معدلة ، وسوف يتم تحميل مكتباتهم المشتركة غير المعدلة كما هو مطلوب ، وسيقوم Windows بتشغيلها كعمليات Windows.
  • عندما يريد برنامج لينكس هذا التفاعل مع النواة ، فإنه يصدر مكالمة نظام (أو يسمح لمكتبة بذلك). هذا هو (المفترض) الاختلاف الوحيد للتشغيل على لينكس: عندما تعمل على لينكس ، فإن نواة لينكس تتعامل مع هذه الدعوات. على Windows 10 ، فإن Windows 10 kernel يقوم بذلك بدلاً من ذلك.

المضاربة

إذن فالسؤال هو ما إذا كانت هناك حاجة إلى تنفيذ عمليات الزحمة التي يحتاجها عامل الميناء (بالنسبة لـ chroot ومساحات الأسماء ، ضمن أشياء أخرى) أم لا. الجواب هو أنه من المحتمل "لا". تتطلب Docker وظائف متطورة إلى حد ما (ولينكس) لإدارة العمليات والموارد ، وعزل العملية. على الرغم من أنه من الممكن تكرار كل هذا على نظام Windows ، إلا أنه سيكون هناك الكثير من العمل ، وبما أن الهدف من ميزة Windows هذه يبدو أنه يعمل على تشغيل برامج مستخدمي Linux ، يبدو من غير المرجح أنهم قاموا بكل العمل (وأبقوه سراً). .

ومع ذلك ، لا توجد معلومات محددة في كلتا الحالتين ، بقدر ما أستطيع أن أقول. 

منافذ Docker الحالية

بالطبع ، إذا قررت Microsoft أنها تريد دعم Docker في نظام التشغيل Windows 10 ، فمن المحتمل أن تتمكن من تقديمه. هناك بعض السوابق لنقل Docker إلى نواة مختلفة:

  • هناك منفذ Docker ل FreeBSD. يطلق عليه "تجريبي" ، ولكن يبدو أنه يعمل من حيث المبدأ. يمكنه استخدام حاويات Docker غير المعدلة من مستودع Docker ، مما يعني أنه يوفر بيئة مضيف تشبه لينكس للصور.
  • هناك مشروع قيد التنفيذ لنقل Docker إلى Windows (على وجه التحديد ، Windows Server 2016) - انظر هذا دخول Docker blog من أغسطس 2015. ومع ذلك ، على عكس منفذ FreBSD أعلاه ، سيكون هذا المنفذ الذي يسمح لـ Docker بتشغيل صور Windows على Windows ، وليس صور Linux على Windows. شكراً لـ (روسي ماكيون) لتوضيح ذلك

50
2018-04-05 07:15



تحديث: هناك مقالة حول الموضوع على مدونة MSDN الآن: ويندوز النظام الفرعي لينكس نظرة عامة. - sleske
اعتبارا من اليوم من الممكن مع Hyper-V: tutorials.ubuntu.com/tutorial/... - Nick Sweeting
لقد قلت ببساطة لأن الإجابة الأعلى صوتًا هي أكثر فائدة ، ثم التكهنات حول ما قد يكون ، فهو يغطي ما هو. - James


يمكنك استخدام Docker for Windows كمحرك و Docker لـ linux كعميل في Bash على Ubuntu على Windows. قم بتوصيلهم عبر TCP.

تثبيت Docker لنظام Windows: https://docs.docker.com/docker-for-windows/ إذا كنت تريد استخدام حاويات Windows بدلاً من حاويات Linux ، فيمكن إدارة حاويات النوع على حدٍ سواء من قِبل عميل dockus linux في مساحة bash.

منذ الإصدار 17.03.1-ce-win12 (12058) يجب عليك التحقق تعرض البرنامج على tcp: // localhost: 2375 دون TLS من أجل متابعة عميل docker linux الاتصال مع daemon docker البرنامج بواسطة TCP

اتبع هذه الخطوات:

cd
wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.1-ce.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

بالطبع يمكنك تثبيت رصيف الميناء

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

أو استخدام النقطة python

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

واستكمال باش. أفضل جزء:

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

لقد قمت باختباره باستخدام إصدار 18.06.0-ce-win59 (19098) من Docker for Windows باستخدام Hyper-V:

~$ docker version
Client:
 Version:           18.06.0-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        0ffa825
 Built:             Wed Jul 18 19:04:39 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.0-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       0ffa825
  Built:            Wed Jul 18 19:13:46 2018
  OS/Arch:          linux/amd64
  Experimental:     true

انظر على حد سواء العميل والخادم يقول نظام التشغيل / القوس: لينكس / amd64

أحجام

توخ الحذر عند إضافة وحدات تخزين. الطريق 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 مدعومًا على نظام التشغيل Windows ، والآن أصبحوا الآن! يمكنك أيضًا الاتصال عبر مآخذ Unix بين Windows و WSL. أحد الأشياء الرائعة في هذا الأمر هو تمكين WSL من تشغيل عميل Docker Linux للتفاعل مع Docker Daemon الذي يعمل على Windows.

مع تحياتي


99
2017-07-19 22:05



مرحبا @ جويل بيرسون ، عامل ميناء قد جزأين: المحرك والعميل. تشغيل المحرك في windows باستخدام Docker Toolbox (VirtualBox) أو Docker لـ Windows (Hyper-V) معتمدة رسميًا من قبل فريق عمال الشحن. لا يعمل محرك Docker في مساحة باش للمستخدم حتى الآن. يمكن تشغيل عميل Docker في windows في cmd أو powershell أو cygwin. ما تقوله هذه الإجابة هو طريقة تشغيل عميل عامل ميناء في bash userspace. لماذا ا؟ أنا شخصيا أفضل bash ، والانتهاء من العمل. أوافق على أن السؤال يتعلق بمحرك عامل الشحن ، لكنني وجدت أنه عندما كنت أبحث عن العميل ، والكثير من الناس يفعلون نفس الشيء. - Carlos Rafael Ramirez
أنا فقط اختبارها ويعمل لي على 1.12 :) سوبر متحمس الآن أن تكون قادرة على القيام ببعض التطور الجاد على النوافذ. - Zach Russell
جربت تعليماتك في Bash على Ubuntu على Windows ، حصلت على "يتعذر الاتصال بشفافية Docker. هل يعمل برنامج docker daemon على هذا المضيف؟". هل تفتقد بعض الخطوات؟ - mpen
اعتبارًا من فبراير 2017 ، لا يزال هذا هو السبيل الوحيد. - hdave
بعد يونيو 2017 ، يمكنك ذلك تشغيل عامل ميناء للنوافذ الملفات التنفيذية من قذيفة باش. بدلا من تثبيت عميل عامل ميناء يمكنك استخدام docker.exe مباشرة للاستعلام / تفاعل الفرعي عامل ميناء. ومع ذلك ، لاحظ أن عامل التوثيق الخاص بالنوافذ سوف يستخدم متغيرات النوافذ والتكوينات. - Jaime


تم إصدار أول معاينة داخلية من أمس. لقد حاولت تثبيت عامل ميناء لكنه فشل مع ما يلي: docker fail

لذلك يبدو ، أنه لأول معاينة لا يعمل حاليا. ومع ذلك ، وكما توقع العديد من الأشخاص ، فقد يعمل في إصدار مستقبلي.


12
2018-04-07 10:29



بارد - شكرا للمحاكمة! - Hawkeye
فكرة جيدة لمحاولة هذا بالفعل. شيء واحد: هل يمكنك من فضلك إضافة نص لقطة الشاشة كنص فعلي (يدعم Ubuntu terminal النسخ واللصق). النص "الحقيقي" له العديد من المزايا (أسهل في القراءة ، يدعم قارئات الشاشة ، يمكن الزحف إليها بواسطة محركات البحث) - sleske
بعض التحديث: لقد تمكنت من تثبيت أداة التثبيت بالكامل على الجهاز الخاص بي بتشغيل تحديث الذكرى السنوية الأخيرة. لكن فعل docker ps فشل مع: Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: setsockopt: invalid argument. Are you trying to connect to a TLS-enabled daemon without TLS? - kumar_harsh
يبدو أنه يعمل الآن: tutorials.ubuntu.com/tutorial/... - Nick Sweeting


لا، هذا غير ممكن.

Docker يحتاج لأشياء متعددة لتشغيل الحاويات:

  • الاستجذار
  • مساحات الأسماء لـ:
    • PID
    • المستخدمين
    • شبكة الاتصال
    • يتصاعد
    • UTS
    • IPC

هذه هي كل ميزات النواة التي يتم تنفيذها في لينكس. لسوء الحظ ، معظمها ليس لديها ميزة مشابهة في Windows لاستخدامها كبديل (ولا في نظام Linux الفرعي الذي قامت Microsoft بتطبيقه في Windows kernel). كل هذه تحتاج إلى أن يوفرها نظام التشغيل.


11
2018-04-04 10:21



في الواقع ، لدى Windows مساحات أسماء للمستخدمين و Mounts و IPC. تعد مساحات أسماء المستخدمين مطلوبة لـ Active Directory ، ومساحات الأسماء ومساحات أسماء IPC مطلوبة للتشغيل متعدد المستخدمين. بشكل أساسي ، لدى إدارة كائنات kernel في Windows دوماً مساحات أسماء ، من إصدار Windows NT الأول ، لذلك ليس ذلك غريبًا. - MSalters
وباستخدام خدمات سطح المكتب البعيد ، تستخدم كائنات جلسة العمل مساحات الأسماء هذه بشكل نشط لتوفير عملية متزامنة. هذا لا يعني أن لديك جميع البنية التحتية المطلوبة ، ولكن هناك أجزاء رئيسية. أما بالنسبة لل chroot، ندرك أن بيئة أوبونتو لديها بالفعل جذور مختلفة عن واحدة WIN32. - MSalters
في الواقع ، أعتقد أنه من السابق لأوانه الإجابة عن هذا في كلتا الحالتين. كما هو موضح في تعليق من سكوت هانسلمان، فإن Windows 10 kernel يقبل الآن Linux syscalls. إذن فالسؤال هو ما إذا كانت هناك حاجة إلى تنفيذ حركات المرور التي يحتاجها عامل الميناء (بالنسبة لـ chroot ومساحات الأسماء) أم لا. في حين أن الجواب من المحتمل "لا" ، لا توجد معلومات محددة في كلتا الحالتين ، بقدر ما أستطيع أن أقول. - sleske
sleske على حق ، هذا السؤال غير قابل للإجابة في الوقت الحالي ، ويقول "لا يمكن ذلك" من دون أي مؤشر حقيقي على ما يصل إليه العمل في الفضاء لينكس في الأرامل هو الغرور إلى حد ما. - Ryan
لا أعرف ما يكفي لأذكر بكل ثقة أن هذه الإجابة خاطئة تمامًا ، لكن الطريقة التي صيغت بها تجعلني أشك في صحتها. على وجه الخصوص ، يقول "Bash هو برنامج فضاء مستخدم بسيط ولا يمكنه تقديم أي من هذه" والإشارة إلى Window Subsystem for Linux باسم "ميزة Bash الجديدة" يجعل الأمر يبدو وكأنه يستند إلى افتراض خاطئ تمامًا أن Microsoft كان باش بورت على ويندوز. هذا ليس ما حدث. طوروا واجهة لينكس كاملة تعمل على قمة نواة Windows: msdn.microsoft.com/en-us/commandline/wsl/about - Ajedi32


اعتبارا من تحديث المنشئ (تم إصداره بشكل عام في 13 يونيو 2017) يمكنك تشغيل Windows التنفيذي القابل للتنفيذ مباشرة في WSL. هذا يعني إذا كنت قد قمت بالفعل بتثبيت عامل الميناء لنظام Windows يمكنك ببساطة استدعاء docker ثنائيات تثبيتها تحت 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) ويجب أن تكون جيدًا.


6
2018-06-22 06:02



لا يبدو أن هذا يلتقط متغيرات بيئة bash في ملفات YML لتأليف docker. أي فكرة عن ذلك؟ - Rüdiger Schulz
هذا منطقي ، لأنك تستحضر Windows docker ثنائي ، ومجرد القيام بذلك من خلال قذيفة لينكس. لست متأكدا إذا كان هناك طريقة جيدة لتحقيق ذلك. - dimo414


بمجرد إصدار Docker 1.12 وتفصل عميل Linux Docker ، يجب أن تتمكن من تشغيل عامل الميناء عميل في ويندوز باش 10.

قد لا يبدو هذا كثيرًا نظرًا لأن لديك عميل Docker Windows ، ولكن من المفيد إذا كان لديك سلاسل أدوات Linux التي تتضمن عامل ميناء لوظائفها من جانب العميل.


5
2018-04-29 09:31





في Windows 10 الإصدار 1607 Build 1493.10 يمكنك تثبيته بنجاح على Ubuntu Bash، لكن لا يعمل :(

سوف يخبرك "إصدار عامل ميناء" بسيط:

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?

إذا قمت بتشغيل "sudo docker -d" تحصل على الخطأ التالي:

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+.

لذلك هذا بالتأكيد سدادة من جانب باش.

ومع ذلك ، يمكنك تثبيت عامل الميناء لنظام Windows وهو يعمل مثل السحر ، يمكنك بوضوح نشر خوادم لينكس وكل ما تحتاجه.

> 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

3
2017-08-12 21:38





اعتبارًا من سبتمبر 2016 ، لا.

تستخدم جميع عمليات التنفيذ الحالية لـ Docker على Windows المحاكاة الافتراضية ، ويستخدم Docker 1.12 برنامج hypervisor في نظام Windows -thus بإزالة ميزة containerisation عبر virtualisation.

يحتاج Docker أكثر من مجرد استخدام مكالمات نظام Linux.

إنه يحتاج إلى مجموعات التحكم في العمليات (cgroups) ، ونظام ملفات قابل للتكديس (aufs) ، بالإضافة إلى أنظمة أخرى قائمة على Linux خارج النواة.

لا cgroups ولا aufs أصلاً في Windows 10 kernel.

يوجد تطبيق Windows Server 2016 هنا: https://msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ... ولكن هذا لن يؤدي إلا إلى تشغيل بعض خدمات Windows ، على سبيل المثال ، IIS ، وليس Ubuntu


2
2017-09-05 13:15





لا يعمل Docker حاليًا في البنية الحالية (14316) - على افتراض أنه يمكنك الحصول عليه مثبتًا.

root@localhost:~# docker --help
runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
fatal error: runtime: address space conflict

1
2018-04-12 20:47



رائع! يرجى الاستمرار في المحاولة. - Hawkeye
يبدو أن هذا قد يكون مرتبطًا بكيفية عمل تخصيص الذاكرة في golang (والتي تتم كتابة Docker بها): groups.google.com/forum/#!msg/golang-dev/EpUlHQXWykg/... - Timothy Meade
يعلق لي للأبد فقط بعد الأمر. - wieczorek1990