Docker部署Bookstack连接Windows本地数据库的通用配置求助
解决Docker Bookstack连接Windows本地动态IP数据库的通用方案
问题背景
在Windows环境下,Docker容器中的Bookstack通过动态IP连接本地3306端口的数据库,但每次重启电脑后IP会变化,需手动修改docker-compose.yml重建容器,且host.docker.internal标识无法生效,需要无需绑定固定IP的通用配置方式。
方案1:修复host.docker.internal解析问题(推荐)
host.docker.internal是Docker官方提供的指向主机的通用标识,失效通常是数据库配置或Docker网络设置问题,按以下步骤修复:
- 修改数据库监听配置
- 找到本地MySQL/MariaDB的
my.ini配置文件(通常在C:\ProgramData\MySQL\MySQL Server X.X或安装目录) - 将
bind-address的值改为0.0.0.0(允许所有IP访问数据库),保存后重启数据库服务
- 找到本地MySQL/MariaDB的
- 授权数据库用户远程访问
- 登录本地数据库,执行以下SQL(适配你的root用户空密码情况):
GRANT ALL PRIVILEGES ON bookstackapp.* TO 'root'@'%' IDENTIFIED BY ''; FLUSH PRIVILEGES;
- 登录本地数据库,执行以下SQL(适配你的root用户空密码情况):
- 更新
docker-compose.yml- 将
APP_URL和DB_HOST替换为host.docker.internal,移除可能影响的network_mode: "bridge"(默认bridge网络已支持该标识):version: "2" services: bookstack_bsv2: image: lscr.io/linuxserver/bookstack container_name: bookstack_bsv2 environment: - PUID=1000 - PGID=1000 - APP_URL=http://host.docker.internal:6885 - DB_PORT=3306 - DB_HOST=host.docker.internal - DB_USER=root - DB_PASS= - DB_DATABASE=bookstackapp volumes: - C:\BookStack\config:/config ports: - 6885:80 restart: always
- 将
- 重新启动容器:
docker-compose up -d
方案2:给Windows网卡设置固定IP
如果不想依赖Docker的标识,可直接给主机网卡分配固定IP:
- 打开「控制面板 → 网络和共享中心 → 更改适配器设置」,右键目标网卡(WLAN/以太网)选择「属性」
- 找到「Internet协议版本4(TCP/IPv4)」,双击后选择「使用下面的IP地址」,设置同网段固定IP(例如
192.168.1.100,子网掩码255.255.255.0,网关填路由器IP) - 更新
docker-compose.yml中的APP_URL和DB_HOST为该固定IP,后续无需再修改
方案3:自动脚本更新IP(无需重建容器)
写一个批处理脚本自动获取当前IP并更新容器环境变量,设置开机自启动:
- 创建
update_bookstack_ip.bat文件,内容如下:@echo off :: 获取非回环的IPv4地址 for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /i "IPv4 Address" ^| findstr /v "127.0.0.1"') do ( set LOCAL_IP=%%a goto :found ) :found set LOCAL_IP=%LOCAL_IP: =% :: 更新容器环境变量并重启 docker container update --env APP_URL=http://%LOCAL_IP%:6885 --env DB_HOST=%LOCAL_IP% bookstack_bsv2 docker restart bookstack_bsv2 - 将脚本放到Windows启动文件夹(按
Win+R输入shell:startup打开),实现开机自动执行
内容的提问来源于stack exchange,提问作者user1572418
相关产品推荐
相关产品推荐

