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

16
据我所知,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))目录不存在。

删除并重新创建容器应该是非常常规的操作,这也比尝试修改Docker内部更好的实践。 - David Maze
2
@DavidMaze 那么您的意思是将容器制作成镜像,并使用该镜像在需要新端口时创建新容器?您能解释一下为什么这样做更好吗?修改Docker内部配置可能会有问题吗? - Yunseong Jeon
3个回答

21

如何访问

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

1
你说得对,所有的文件都可以在目录下找到。但是它总是被重建,我的修改都丢失了。 - Sheldon Wei
我只需要将该路径放入资源管理器文件搜索中(在输入容器ID后)吗? - David G
是的,\\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\{containerid} 应该会直接带您进入容器的隐藏文件夹。 - Spastika

9

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

在我的系统上(Windows 11),Docker 容器的路径为:

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

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


4

Docker桌面版 (Windows 10)

您可以在此处找到它(有关更多信息,请参见以下步骤):

cd /var/lib/docker/containers/container-id

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接