You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker中运行Jekyll 3.10.0时生成的URL含0.0.0.0导致链接失效的问题求助

Docker中运行Jekyll 3.10.0时生成的URL含0.0.0.0导致链接失效的问题求助

我之前也踩过这个一模一样的坑!其实核心就是Jekyll生成链接时用的默认地址和你实际访问的地址不匹配,给你几个简单直接的解决办法,保证容器能正常访问,生成的链接也没问题:

方法一:修改Jekyll的配置文件

Jekyll生成页面链接时,会参考_config.yml里的urlbaseurl参数,默认情况下它会用服务绑定的IP(也就是你设置的0.0.0.0),所以我们手动指定正确的访问地址就行:

  1. 打开项目根目录的_config.yml文件
  2. 添加或修改以下两行:
    url: "http://127.0.0.1:4000"
    baseurl: ""  # 如果你的站点部署在根路径就留空,有子路径的话填对应路径,比如"/my-blog"
    
  3. 重启Docker里的Jekyll服务,之后生成的所有链接就会自动用你指定的127.0.0.1:4000

方法二:直接在Docker Compose命令里覆盖参数

如果不想改配置文件,也可以在启动命令里直接加--url参数临时覆盖配置,这样更灵活:
把Docker Compose里的command改成下面这样:

command: jekyll serve -H 0.0.0.0 -w --url http://127.0.0.1:4000

这样Jekyll启动时会直接用这个指定的URL生成链接,同时服务依然监听0.0.0.0,完全不影响宿主机通过4000端口访问。

顺便给你解释下为什么改-H参数没用

你之前把-H 0.0.0.0改成127.0.0.1后连不上是正常的,因为容器里的127.0.0.1和宿主机的127.0.0.1是完全独立的网络空间,容器里的服务只监听自己的127.0.0.1的话,宿主机根本访问不到,所以必须让服务监听0.0.0.0(也就是容器的所有网络接口),这样宿主机的端口映射才能生效。

如果之后你需要在局域网里的其他设备访问这个站点,只需要把上面的url改成你宿主机的局域网IP就行(比如http://192.168.3.100:4000),生成的链接在局域网内也能正常点击跳转~

火山引擎 最新活动