GitLab服务器Docker运行Jekyll后找不到站点及容器问题排查
问题分析与解决
为什么第一次的站点找不到?
你第一次执行的命令存在关键的挂载路径错误:
sudo docker run --rm -it --volume="$PWD:/srv/jekyll1" jekyll/jekyll:4.0 jekyll new blog
jekyll/jekyll官方镜像的默认工作目录是/srv/jekyll,当你运行jekyll new blog时,Jekyll会在容器的**当前工作目录(也就是/srv/jekyll)**下创建blog站点目录。但你挂载的是宿主机的$PWD到容器的/srv/jekyll1,这个挂载目录和Jekyll创建站点的目录完全不相关!
再加上你用了--rm参数,容器执行完命令就会被立即删除,所以容器内/srv/jekyll/blog这个临时目录也跟着消失了,宿主机自然找不到它。
为什么第二次提示目录已存在?
你第二次的命令改成了:
sudo docker run --rm -it --volume="$PWD:/srv/jekyll" jekyll/jekyll:4.0 jekyll new blog
这次你把宿主机的$PWD(当前目录)挂载到了容器的默认工作目录/srv/jekyll,所以Jekyll检查容器内/srv/jekyll/blog时,其实是在检查宿主机$PWD下的blog目录——这说明你的宿主机当前目录下已经存在blog文件夹!
这个文件夹可能是你之前某次操作(比如不小心在宿主机创建的,或者之前错误挂载时意外留下的)产生的,和第一次容器里的临时站点没关系。
如何找到你的Jekyll站点?
首先确认你执行这些Docker命令时的当前目录:
在宿主机上执行:# 查看vagrant用户的家目录下是否有blog ll /home/vagrant # 或者查看Vagrant共享目录(通常是/vagrant) ll /vagrant因为你是用
vagrant用户操作的,大概率$PWD是这两个目录之一。如果找到
blog目录,那就是你现在能操作的站点;如果没找到,那第一次的站点确实已经随着容器删除了,你可以用--force参数重新创建:sudo docker run --rm -it --volume="$PWD:/srv/jekyll" jekyll/jekyll:4.0 jekyll new blog --force
后续正确操作建议
以后创建Jekyll站点时,确保挂载路径对应容器的默认工作目录/srv/jekyll,比如:
# 先切换到你想存放站点的宿主机目录 cd /path/to/your/site/folder # 然后运行命令 sudo docker run --rm -it --volume="$PWD:/srv/jekyll" jekyll/jekyll:4.0 jekyll new blog
内容的提问来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

