Docker Dockerfile制作Gitbook镜像
HDUZN

上一篇文章用Docker搭建了Gitbook的环境:Docker搭建Gitbook,然后发现个小问题,问题不大,不过感觉Gitbook的版本实在太低了。

毕竟是7年前的镜像了,用gitbook -V查看了下gitbook的版本,竟然是:0.3.4

于是,决定还是自己用Dockerfile制作个Gitbook的镜像好了。

自己用Dockerfile制作镜像也挺方便的,参考:Docker Dockerfile文件详解(制作自己的镜像)

也就是第一次生成镜像的时候花点时间。

一、制作Gitbook镜像

1.Dockerfile文件

node的版本反正用12点几的还是有问题,索性降到8,反正是没问题的。

因为我只是需要环境,并不是直接就生成电子书了,所以最后的CMD的命令也不需要执行。

Dockerfile文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Use an official Node.js runtime as a parent image
FROM node:8.11.1

# creates a directory with this name if it doesn’t exist
# WORKDIR:设置容器启动后的默认运行目录 /gitbook
WORKDIR /gitbook

# Set npm registry to China Taobao and install Gitbook
RUN npm config set registry https://registry.npm.taobao.org
RUN npm install gitbook-cli -g
RUN gitbook -V

# Make port 4000 available to the world outside this container
EXPOSE 4000

# CMD ["sh", "-c", "gitbook install /gitbook; gitbook serve /gitbook"]

2.生成镜像

因为有本地安装过,所以知道现在的gitbook版本是:3.2.3,不确定的话,这里的版本号自己看着写吧。自己编一个差不多的也行。

注意最后有个点表示当前目录,所以需要在Dockerfile文件所在的目录下运行此命令。

1
docker build -t gitbook:3.2.3 .

等待制作完成,估计需要几分钟。完成后用命令docker images就可以看到 gitbook:3.2.3 这个镜像了。

二、运行Gitbook容器

1.运行Gitbook容器

1
docker run -idt --name gitbook_cs -p 14001:4000 -v E:\SynologyDrive\Gitbook\cs_gitbook:/gitbook gitbook:3.2.3 /bin/bash

–name gitbook_cs:容器名称,自己取
-p 14001:4000:把容器中的4000端口映射到本地14001端口,这个也随意

1
2
3
4
5
6
7
8
9
10
11
# 进入容器
docker exec -it gitbook_cs /bin/bash

# 初始化,会生成README.md 和SUMMARY.md文件
gitbook init

# 编辑README.md 和SUMMARY.md文件后再次执行,生成目录、文件
gitbook init

# 启动服务,在线预览,打开 http://localhost:14001 就可以看到了
gitbook serve

2.Error:no such file fontsettings.js

这个报错不一定会有,我用Win10装的Docker里有这个问题,用Ubuntu20.04 LTS的服务器上也是Docker里装,就没碰到这个报错。

执行gitbook servegitbook build都会报错:

1
Error: ENOENT: no such file or directory, stat '***/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js'

解决方法:

找到/root/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js文件:

1
2
3
4
5
6
7
8
9
return fs.copyDir(
assetsFolder,
assetOutputFolder,
{
deleteFirst: false,
overwrite: true,
confirm: true
}
);

confirm: true修改为confirm: false,注意有2处!

这个文件的路径中有个gitbook的版本号,找对应的版本号。可先在容器内查看找到此文件。

因为用的Docker,所以使用 Docker 容器修改方法如下:

1
2
3
4
5
6
7
# 1.把copyPluginAssets.js文件从容器中拷到当前目录下
docker cp gitbook_cs:/root/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js ./copyPluginAssets.js

# 2.按上面的方法修改copyPluginAssets.js文件

# 3.再把修改后的copyPluginAssets.js文件覆盖容器内的文件
docker cp copyPluginAssets.js gitbook_cs:/root/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js

再执行gitbook serve就没问题啦。

  • 本文标题:Docker Dockerfile制作Gitbook镜像
  • 本文作者:HDUZN
  • 创建时间:2023-01-10 19:23:12
  • 本文链接:http://hduzn.cn/2023/01/10/Docker-Dockerfile制作Gitbook镜像/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论