【问题标题】:How to access the VM created by docker's HyperKit?如何访问 docker 的 HyperKit 创建的虚拟机?
【发布时间】:2017-02-05 23:09:24
【问题描述】:

Docker for Mac 使用HyperKit 创建的 Linux VM 在 Mac 上存储和运行容器。

使用 Docker Toolbox,我可以打开 VirtualBox 并访问 docker-machine 虚拟机。但是使用 Docker for Mac,如何访问由 HyperKit 创建的 VM?

【问题讨论】:

    标签: docker docker-machine docker-for-mac


    【解决方案1】:

    2019-01-31更新,感谢ru10的更新,现在有更好的办法:

    screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
    

    原答案:

    一段时间后,我找到了以下方法来获取由 HyperKit 创建的 VM 的外壳:

    从终端运行:

    screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
    

    你会看到一个空白的屏幕,然后输入回车,你会得到一个登录提示。以root登录并回车,你会得到一个shell(无密码),你会得到一个shell:

    要退出会话,请输入 Ctrl-A k(然后输入 y 进行确认)。

    这有点老套,但现在似乎可以使用 (2016 年 9 月)(2017 年 9 月)。

    【讨论】:

    • 这对我来说完全崩溃了。我可以连接,但 TERM 设置或数据传输方式存在严重问题。我得到一个无法正常工作的终端会话,它正在丢失数据并且格式不正确。我正在尝试更多方法来重置会话,但到目前为止失败了。
    • 对我来说它仍然有效(2017 年 2 月 1.13.0-beta39 使用 iterm2 终端模拟器)
    • 他们需要更好的指南。我能够按照您的指示进入虚拟机。就我而言,在第一次按下回车键后,它只是将我带到了 VM 的sh 提示符。当我在tty 路径上运行ls -l 时,发现/dev/ttys001 有一个指向它的链接,这更容易输入。
    • 在这个界面上我们可以做什么?例如,我无法运行节点,我将其复制到其他地方不起作用。
    • 这在 Docker Desktop 3 中不再适用。
    【解决方案2】:

    Mac OS High Sierra Docker 版本 18.06.0-ce-mac70 (26399)

    screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
    

    而不是

    screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
    

    【讨论】:

    • 感谢更新路径。接受的答案需要更新。
    • 嗯...我在 MacOs Catalina 和 DFD v2.3.0.4 中收到“Cannot exec ~/Library/Containers/com.docker.docker/Data/vms/0/tty Permission denied”错误
    • 这是由于一个错误:github.com/docker/for-mac/issues/4822
    • 这在 Docker Desktop 3 中不再适用。
    【解决方案3】:

    根据 Docker 维护者this GitHub issue comment 的说法,访问 VM 的推荐方法是通过特权 docker 容器。

    尝试登录虚拟机:(我建议这样做而不是在 TTY 上使用屏幕)

    $ docker run -it --privileged --pid=host justincormack/nsenter1
    

    【讨论】:

    • 这对我有用,在 catalina 中访问 tty 没有
    • 这应该是 2021 年公认的答案,因为在最新版本的 Docker Desktop 中,tty 链接已经消失。如果您对使用来自未经验证的发布者的随机图片持怀疑态度,这也可以:docker run -it --rm --privileged --pid=host busybox nsenter -t1 -m -u -i -n
    • 有时 docker 守护进程被占用,您需要访问 VM 才能恢复它。事实上,这是我的开发人员迄今为止唯一一次需要访问 VM 的情况。
    【解决方案4】:

    事实上,augurar 的答案是 smammy 所说的截至 2021 年唯一有效的答案,其他选项已弃用。

    所以:

    $ docker run -it --privileged --pid=host justincormack/nsenter1
    

    是正确的答案,截至 2021 年 7 月,我在 MacOS Big Sur 中为我工作。

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2021-06-15
      • 2017-09-04
      相关资源
      最近更新 更多