记录Docker Desktop和Docker CE之间的差异

首先

如果在Windows + WSL环境中从Docker Desktop迁移到Docker CE,即使之前只在WSL内进行操作和使用,也可能会遇到一些问题。我们可能会意识到Docker Desktop变得更加方便,但现在无法使用了。下面是一些备忘录中的替代计划。

本地回环地址的映射

Docker Desktop127.0.0.1~127.255.255.255までアドレスをマップできるDocker CE127.0.0.1しかマップできない

Docker Desktop可以使用127.0.0.0/8网段。例如,Docker Desktop的中继进程可以将127.1.1.1等地址映射到Windows主机上。
Docker CE也可以将127.1.1.1地址映射到与主机对应的WSL实例上。然而,从WSL到Windows主机的映射仅限于127.0.0.1,因此无法映射到Windows主机上。

替代方案

在WSL实例中分配预先确定的IPv6唯一本地地址,并将该地址映射到此地址。使用链路本地的空闲前缀会导致容器启动时出错,因此需要使用唯一地址。

参考)尝试在WSL2的Ubuntu中添加多个固定的IP(IPv6)地址。

主机.docker.内部

Docker DesktopWindowsホスト(デフォルトでは192.168.65.2)を指すDocker CEhost.docker.internal:host-gateway が代替するが、WSLインスタンスを指す

在Docker Desktop中,可以使用特殊的域名host.docker.internal来中继到Windows主机上。而且由于中继过程是作为本地访问进行的,所以不会受到防火墙的影响。
在Docker CE中,也提供了一种名为”host-gateway”的关键词来注册到extra_hosts中作为host.docker.internal的替代方法,但是在这里所说的主机是指WSL,与Docker Desktop的概念不同。

使用PHPDebug扩展来使用Visual Studio Code的情况

如果使用Remote WSL访问源代码树,则VSCode会将Windows主机上打开的localhot:9003端口代理到WSL的localhost:9003上。

Windowslocalhost:9003WSLlocalhost:9003

這種情況

Docker Desktophost.docker.internal = Windowsの9003へ接続*可能*Docker CEhost.docker.internal = WSLの9003へ接続*可能*

邻居两边都可连通。

即使使用Remote Container,WSL通过连接到远程容器对于双方来说都没有问题。然而,由于VS Code的中继进程在容器内启动,因此Windows和容器内都会监听9003端口。

Windowslocalhost:9003WSLN/AContainerlocalhost:9003

在这种情况下,与Remote WSL不同的是

Docker Desktop 〇host.docker.internal = Windowsの9003へ接続*可能*Docker Desktop 〇localhost = Containerの9003へ接続*可能*Docker CE ×host.docker.internal = WSLの9003へ接続*不可能*Docker CE 〇localhost = Containerの9003へ接続*可能*

在Docker Desktop中,无论是使用Remote WSL还是Container,都可以使用host.docker.internal进行设置。但是在Docker CE中,需要根据使用的远程功能来切换xdebug的配置。

我想在WSL2 + Docker Engine(!=Desktop)中使用Windows凭据。

(Note: Chinese translation depends on the context and may vary. This is one possible version.)

在认证过程中会出现警告

使用Docker Desktop时,通过docker login登录注册表时,认证信息的管理将通过docker-credential-desktop.exe来委托给Windows处理。然而,如果只安装了Docker Engine而没有助手程序,将会出现警告。

$ docker login xxxxxx
Username: shigeokamoto
Password: xxxxxxx
WARNING! Your password will be stored unencrypted in /home/shigeokamoto/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

この警告メッセージから辿って、docker/docker-credential-helpersを確認すると、
docker-credential-wincred-v0.6.4-amd64.zipというのがあります。docker-credential-wincred.exe自体はDocker Desktopにも
付属していて、docker-credential-desktop.exeをヘルパーとして使った場合でも最終的にはこのプログラムを呼び出しているようです。

如果那样的话,使用这个应该能解决问题。

    1. 将docker-credential-wincred.exe保存到已配置的路径(例如/usr/local/bin)中,

 

    根据Docker Desktop的设置创建(或追加)~/.docker/config.json的文件。

如果只需要认证以外的配置,可以删除config.json中记录的认证信息,并只需记述以下部分即可。

{
        "credsStore": "wincred.exe"
}

只需重复执行”docker login”和”docker logout”命令,就可以确认将凭据存储或删除到Windows凭据存储区,完成操作。

广告
将在 10 秒后关闭
bannerAds