AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 767994
Accepted
Hawkeye
Hawkeye
Asked: 2016-04-05 02:16:14 +0800 CST2016-04-05 02:16:14 +0800 CST 2016-04-05 02:16:14 +0800 CST

您可以在新的 Windows 10 (Ubuntu) bash 用户空间上本地运行 Docker 吗?

  • 772

我的理解是,在其他操作系统上运行 docker 的主要限制是使其成为可能的 Linux 网络容器。(当然适用于 Mac)。

最近微软宣布了一个在 Windows 10 上本地运行的Ubuntu linux用户模式的测试版。这可以在 Windows 上运行以 ELF 格式编译的二进制文件(与需要编译的 cygwin 不同。)

我的问题是:你能在新的 Windows 10 (Ubuntu) bash 用户空间上本地运行 Docker 吗?

windows
  • 10 10 个回答
  • 90194 Views

10 个回答

  • Voted
  1. Best Answer
    Carlos Rafael Ramirez
    2016-07-20T14:05:51+08:002016-07-20T14:05:51+08:00

    在 Windows 上的 Ubuntu / Debian 上,您可以使用 Docker Desktop for Windows 作为引擎,将 Docker for Linux 作为客户端。通过 TCP 连接它们。

    为 Windows 安装 Docker 桌面:https ://hub.docker.com/editions/community/docker-ce-desktop-windows 如果你想使用 Windows 容器而不是 Linux 容器,这两种类型的容器都可以由 Linux docker 客户端在bash 用户空间。

    从版本 17.03.1-ce-win12 (12058) 开始,您必须选中Expose daemon on tcp://localhost:2375 without TLS以允许 Linux Docker 客户端继续通过 TCP 与 Windows Docker 守护程序通信

    按着这些次序:

    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
    

    我已经使用 Hyper-V 使用 Docker Desktop 的 2.1.0.1 (37199) 版本对其进行了测试:

    $ 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**
    

    卷

    添加卷时要小心。该路径C:\dir将/mnt/c/dir在 WSL 和/c/dir/docker 引擎上可见。您可以永久克服它:

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

    对 wsl.conf 进行更改后,您必须退出并重新加载 WSL,以便 WSL 在启动时读取您的更改。

    更新

    来自:Windows 10 版本 1803 中命令行的新增功能

    Unix 套接字 Windows 不支持 Unix 套接字,现在支持了!您还可以通过 Unix 套接字在 Windows 和 WSL 之间进行通信。这样做的好处之一是它使 WSL 能够运行 Linux Docker 客户端以与在 Windows 上运行的 Docker 守护程序进行交互。

    更新

    该脚本和 Unix 套接字的使用包含在Pengwin的 pengwin-setup 中。

    问候

    • 104
  2. sleske
    2016-04-05T23:15:06+08:002016-04-05T23:15:06+08:00

    截至目前(2016 年 4 月),答案是:

    我们还不知道(但可能不知道)。

    事实

    • Windows 10 现在可以运行各种 Linux 程序(其中包括 Bash shell 和各种文本实用程序)。这些不是端口(即重新编译的版本,例如在Cygwin中),它们是在典型 Linux 系统上运行的相同ELF 二进制文件。在这种情况下,它们取自 Ubuntu。
    • 为了实现这一点,Windows 10 被修改为接受 Linux 系统调用 (syscalls),并且能够加载和运行 ELF 二进制文件(Scott Hanselman 评论)。这意味着可以运行未修改的 Linux 可执行文件,它们将根据需要加载其未修改的共享库,并且 Windows 会将它们作为 Windows 进程运行。
    • 每当这样的 Linux 程序想要与内核交互时,它都会发出一个系统调用(或让一个库来做)。这是(大概)与在 Linux 上运行的唯一区别:在 Linux 上运行时,Linux 内核处理这些调用;在 Windows 10 上,Windows 10 内核执行此操作。

    猜测

    所以问题是 Docker 需要的系统调用(用于 chroot 和命名空间等)是否已实现。答案很可能是“不”。Docker 需要相当复杂的(和特定于 Linux 的)功能来进行进程和资源管理以及进程隔离。虽然可能可以在 Windows 上复制所有这些,但这将需要大量工作,并且由于此 Windows 功能的目标似乎是运行 Linux 用户空间程序,他们似乎不太可能完成所有工作(并保密) .

    但是,据我所知,这两种方式都没有确定的信息。

    现有的 Docker 端口

    当然,如果微软决定他们希望在 Windows 10 中支持 Docker,他们可能会提供它。将 Docker 移植到不同的内核有一些先例:

    • FreeBSD有一个Docker 端口。它被标记为“实验性”,但似乎在原则上有效。它可以使用来自 Docker 存储库的未修改的 Docker 容器,这意味着它实际上为图像提供了一个类似于 Linux 的主机环境。
    • 有一个将 Docker 移植到 Windows(特别是 Windows Server 2016)的项目正在进行中 - 请参阅 2015 年 8 月的这个Docker 博客条目。然而,与上面的 FreBSD 端口不同,这将是一个允许 Docker 在 Windows 上运行 Windows 映像的端口,不是 Windows 上的 Linux 映像。感谢 Rоry McCune 指出这一点。
    • 51
  3. Florin Asăvoaie
    2016-04-05T02:21:35+08:002016-04-05T02:21:35+08:00

    不,这是不可能的。

    Docker 需要多个东西才能运行容器:

    • chroot
    • 命名空间:
      • PID
      • 用户
      • 网络
      • 坐骑
      • 悉尼科技大学
      • 工业PC

    这些都是在 Linux 中实现的内核特性。不幸的是,它们中的大多数在 Windows 中没有类似的功能可用作替代品(在微软在 Windows 内核中实现的 Linux 子系统中也没有)。所有这些都需要由操作系统提供。

    • 13
  4. CodedBeard
    2016-04-08T02:29:45+08:002016-04-08T02:29:45+08:00

    昨天发布了第一个内幕预览。我尝试安装 docker,但失败并显示以下内容: 码头工人失败

    所以看起来,对于第一个预览,它目前不起作用。然而,正如许多人推测的那样,它可能会在未来的版本中使用。

    • 13
  5. dimo414
    2017-06-22T22:02:13+08:002017-06-22T22:02:13+08:00

    从Creator 更新(2017 年 6 月 13 日公开发布)开始,您可以直接在 WSL 中运行本机 Windows 可执行文件。这意味着如果您已经安装了Docker for 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),您应该会很好。

    • 7
  6. mixja
    2016-04-30T01:31:12+08:002016-04-30T01:31:12+08:00

    一旦 Docker 1.12 发布并分离了 Linux Docker 客户端,您应该能够在 Windows 10 bash 中 运行 docker客户端。

    考虑到你有一个 Docker Windows 客户端,这听起来可能并不多,但如果你有包含 docker 的 Linux 工具链来实现它的客户端功能,它会很有用。

    • 6
  7. Bruno Medina
    2016-08-13T13:38:23+08:002016-08-13T13:38:23+08:00

    在 Windows 10 版本 1607 Build 1493.10 中,您可以在 Ubuntu Bash 上成功安装它,但它不起作用:(

    一个简单的“docker 版本”会告诉你:

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

    所以这绝对是 bash 方面的一个障碍。

    不过,您可以安装Docker for Windows,它就像一个魅力,您显然可以部署 Linux 服务器和您需要的一切。

    > 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
  8. Graham
    2016-09-06T05:15:52+08:002016-09-06T05:15:52+08:00

    截至 2016 年 9 月,第

    Windows 上的所有当前 Docker 实现都使用虚拟化,Docker 1.12 在 Windows 中使用虚拟机管理程序 - 因此消除了容器化相对于虚拟化的优势。

    Docker 需要的不仅仅是使用 Linux 系统调用。

    它需要进程控制组 (cgroups)、可堆叠文件系统 (aufs) 以及内核之外的其他基于 Linux 的系统。

    cgroups 和 aufs 都不是原生的 Windows 10 内核。

    这里有一个 Windows Server 2016 的实现:https: //msdn.microsoft.com/en-gb/virtualization/windowscontainers/quick_start/quick_start_windows_server ..但这只会运行一些 Windows 服务,例如 IIS,而不是 Ubuntu

    • 3
  9. lgj
    2016-04-13T12:47:38+08:002016-04-13T12:47:38+08:00

    Docker 目前在当前版本 (14316) 中不工作 - 假设您可以安装它。

    root@localhost:~# docker --help
    runtime: address space conflict: map(0x7ff5ddbb0000) = 0x7ff5ffd20000
    fatal error: runtime: address space conflict
    
    • 2
  10. gavenkoa
    2016-08-04T04:20:51+08:002016-08-04T04:20:51+08:00

    来自: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

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve