【问题标题】:Can ddev work with WSL (Windows Subsystem for Linux)?ddev 可以与 WSL(Linux 的 Windows 子系统)一起使用吗?
【发布时间】:2018-10-24 17:01:06
【问题描述】:

作为一个在 Windows 机器上工作但喜欢将 Ubuntu 作为工作环境的人,我想在WSL 中使用 ddev。有没有办法做到这一点?

【问题讨论】:

    标签: windows-subsystem-for-linux wsl-2 ddev


    【解决方案1】:

    2021 年更新: DDEV 拥有WSL2 install instructions


    (2018-11-15:针对 ddev v1.4.0 更新) 这很棘手,但可以做到。请注意,没有关于此的测试或性能结果,并且它不是受支持的技术。

    请注意,WSL 实际上的行为类似于 linux 并使用 linux 二进制文件,因此您将使用 linux 版本的 ddev。

    最大的问题是 docker 守护进程在本机 Windows 下运行,而 WSL 具有不同的文件系统布局,因此您必须对 WSL 端的所有内容进行欺骗,以使用 Docker 守护进程能够在本机中找到的路径窗户。

    • 首先按照这篇出色的文章中的描述设置您的 WSL/Docker 环境:https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly#ensure-volume-mounts-work - 但使用 DOCKER_HOST=tcp://127.0.0.1:2375 而不是在其中使用“localhost”。

    • 使用Linux instructions 安装 ddev。

    • 确保所有项目都已使用ddev rm -a 进行了 rm'd; ddev 无法从 WSL-land 访问已在原生 Windows 中运行或停止的项目。

    • 您可能会在计算机的 windows 端使用 Web 浏览器,因此在 Windows 端添加项目的主机名并使用 ddev hostname <yourproject.ddev.local> 127.0.0.1

    • cd /c/Users//path/to/project (这是 docker 理解的路径。)

    • ddev 开始

    • 使用浏览器访问项目。

    基本上,通过这种技术,您使用的是 Docker 守护程序知道如何在本机窗口中遵循的路径。

    无论如何,它似乎适用于一个简单的例子。欢迎您的 cmets,如果人们喜欢,我们可能会在未来改进支持。

    【讨论】:

    • "注意 WSL 真的是 linux" -- WSL 不是 LINUX。 WSL 就像一个兼容层。
    • 谢谢 - 它比以前任何 Windows 兼容层都要多得多的 Linux :) 你可以 apt-get install 的事实是相当惊人的。我确实理解其中的区别,但 WSL 实际上很棒。
    • 试过了,但在运行 ddev start 时出错。看起来变量不能被替换? Compose 文件 '/mnt/d/seu/source/iptp/.ddev/docker-compose.yaml' 无效,因为:services.db.ports 包含无效类型,它应该是数字或对象 services.web .ports 包含无效类型,应为数字或对象 services.web.ports 包含无效类型,应为数字或对象
    • 好的,正如你所说,通过运行命令连接到 127.0.0.1 的 docker 来解决这个问题,干杯!
    • 我刚刚浏览了这些说明,并且能够让它们正常工作。我最大的问题是自我引发的,因为我将 .ddev/config.yaml 签入了我试图从中运行站点的存储库。该配置将 nfs 标志设置为 true,这会导致错误(我将在另一天处理 nfs)。上面的链接旨在设置卷挂载,但我在整个 docker 安装和设置中都遵循了它。我不必按照建议运行ddev hostname,因为该部分对我有用。感谢您的写作!
    【解决方案2】:

    我让它在 WSL 中工作(当前为 1.5.1)。我使用的是 Docker Toolbox,所以 Docker4Windows 可能会有所不同。

    WSL 内部的常规设置(我使用的是 ubuntu)

    1. 安装 docker (apt-get install docker.io)
    2. 通过将默认 docker 机器证书复制到 WSL

    cp /mnt/c/Users/[YOUR WINDOWS USER]/.docker/machine/machines/default/*.pem ~/.docker

    1. 在 WSL 中设置环境变量(例如在 ~/.bashrc 中)

    导出 DOCKER_HOST=tcp://192.168.99.100:2376

    导出 DOCKER_TLS_VERIFY=1

    导出 DOCKER_CERT_PATH=~/.docker

    要使用的实际值可以通过 docker 工具箱中的docker-machine.exe env 确定!

    此时您应该从docker version 获得完整的输出(不要忘记重新启动shell 以实际加载修改后的环境)

    Client:
     Version:           18.06.1-ce
     API version:       1.38
     Go version:        go1.10.4
     Git commit:        e68fc7a
     Built:             Fri Oct 19 19:43:14 2018
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server:
     Engine:
      Version:          18.06.1-ce
      API version:      1.38 (minimum version 1.12)
      Go version:       go1.10.3
      Git commit:       e68fc7a
      Built:            Tue Aug 21 17:28:38 2018
      OS/Arch:          linux/amd64
      Experimental:     false
    

    容器还不能启动,因为文件系统的挂载会失败!

    使用 Docker Toolbox,docker 服务器在/c/ 下拥有可用的主机文件系统。但是从 WSL 运行的预期路径是 /mnt/c/

    1. 生成符号链接足以使其可用docker-machine.exe ssh default 'sudo ln -s /c /mnt/c'

    此命令必须在重新启动后重新运行,否则您必须通过bootlocal.sh 机制使更改永久化。

    使用来自 WSL 的 docker run --rm -i -t -v ${PWD}:/mnt ubuntu bash 测试您的映射。

    1. 安装 docker-compose,根据您的发行版,它已过时,需要替换为当前版本。

    2. 享受 ddev

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2018-11-25
      • 1970-01-01
      • 2019-04-20
      • 2018-07-09
      • 2019-07-03
      相关资源
      最近更新 更多