报错信息:
(HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:11521 -> 127.0.0.1:0: listen tcp 0.0.0.0:11521: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
CMD或者PowerShell中输入下面的命令,查看windows的保留端口。
bash
netsh interface ipv4 show excludedportrange protocol=tcp

试着删除这些排除端口时,发现并没有用,因为这些"拒绝访问"提示说明那些排除区间是由系统(Hyper-V/WSL2/Docker NAT 或 ICS 服务)管理的,netsh 本身无法直接删除它们。要真正清空这些保留端口,你需要先移除创建它们的网络服务,再让 Windows 自动释放对应范围。
解决方案
我这里原来的容器使用的卷oracle11g_xin,这里以使用oracle11g_xin为例作为延时。
1、停止旧容器
bash
docker stop oracle11g_xin
2、重命名旧容器(保留数据卷)
bash
docker rename oracle11g_xin oracle11g_xin_old
3、启动新容器,重新设置映射端口,建议设置为40000-50000端口范围内,复用旧容器的卷
bash
docker run -d --name oracle11g_xin --volumes-from oracle11g_xin_old -e ORACLE_ALLOW_REMOTE=true -e ORACLE_PASSWORD=Li123456 -p 41521:1521 -p 48080:8080 rohitbasu77/oracle11g:latest
4、验证新容器
bash
docker ps
5、清理旧容器(可选)
bash
docker rm oracle11g_xin_old
启动成功,原来的数据都在!
