hostconfig.json 在哪里(Docker 桌面 + WSL2 环境)

Yun*_*eon 3 docker wsl-2

据我所知,docker 不支持在创建容器后更改端口映射的任何命令。
但是这个答案说通过更改 hostconfig.json 文件,我可以更改端口映射。

如何将端口映射分配给现有的 Docker 容器?
我在 windows + WSL2 中使用 docker 桌面。所以 hostconfig.json 的路径与其他答案不同。
hostconfig.json 在哪里?
就我而言, (\wsl$\docker-desktop-data\mnt\wsl\docker-desktop-data\data, /var/lib/docker(in wsl)) 目录不存在。

Seb*_*ger 11

我知道这个问题已经得到解答,但我系统中的路径不同。如果其他人也遇到同样的问题,我不想为自己保留解决方案。

我的系统(Windows 11)上 Docker 容器的路径是:

\\wsl.localhost\docker-desktop-data\data\docker\containers

只是略有不同,但直到几分钟前,我还怀疑文件 hostconfig.json 在我的系统上是否可访问,因为您在互联网上找到的众多路径在我的系统上并不存在。


小智 5

可以访问的地方

hostconfig.json 可以在 WSL2 中使用 Windows 资源管理器在隐藏的网络路径中找到容器 \\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\{containerid}\hostconfig.json

带有 hostconfig.json 的 Windows 资源管理器屏幕截图

它不是(但可能是预期的)

的子目录/mnt/wsl/docker-desktop-data/version-pack-data没有暴露给 WSL(出于某种原因):

deno@DeonJ-T570:/mnt/wsl/docker-desktop-data/version-pack-data$ sudo ls -al
[sudo] password for deno: 
total 0
drwxr-xr-x 2 root root  40 May 25 12:09 .
drwxr-xr-x 6 root root 120 May 25 12:09 ..
deno@DeonJ-T570:/mnt/wsl/docker-desktop-data/version-pack-data$ 
Run Code Online (Sandbox Code Playgroud)


jum*_*key 5

Docker 桌面(Windows 10)

您可以在这里找到它(有关更多信息,请参阅以下步骤):

cd /var/lib/docker/containers/container-id
Run Code Online (Sandbox Code Playgroud)

更改容器主机端口而不删除容器的步骤:

  • 停止运行容器
  • docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -it -v /:/host alpine
  • chroot /主机
  • cd /var/lib/docker/containers/容器 ID
  • cat hostconfig.json //您将看到当前正在使用的端口
  • echo '上述 json, 并更改端口' > hostconfig.json //使用外部单引号保留 json 双引号
  • 重新启动 docker-desktop