如何为Docker Ghost容器添加额外绑定挂载?解决挂载报错
解决Docker挂载Ghost配置文件的类型不匹配错误
问题根源
你遇到的报错核心是挂载类型不匹配:你试图将宿主机上的目录/home/ubuntu/config6挂载到容器内的文件路径/var/lib/ghost/config.production.json,Docker严格禁止这种“目录→文件”的跨类型挂载,因此抛出了not a directory的错误。
另外,你的需求是让容器创建config.production.json并挂载到宿主机的$(pwd)/testFolder/config.production.json(当前不存在),但直接挂载不存在的文件路径时,Docker会默认创建一个目录而非文件,这也会导致后续的挂载冲突。
正确解决方案
要实现你的需求,需要分两步操作:
1. 先在宿主机创建空的配置文件(或复制容器默认配置)
Docker挂载文件时,要求宿主机的目标路径必须是文件(而非目录)。因此你需要先手动创建空文件,或者从容器中复制默认配置文件:
方式一:创建空文件
# 先确保testFolder目录存在 mkdir -p $(pwd)/testFolder # 创建空的config.production.json文件 touch $(pwd)/testFolder/config.production.json
方式二:复制容器默认配置(推荐,直接获得可用的默认配置)
如果你想直接使用Ghost的默认配置文件,可以临时启动一个容器并复制出来:
# 启动临时Ghost容器 sudo docker run --rm -d --name temp-ghost ghost:latest # 等待容器启动后,复制默认配置到宿主机目标路径 sudo docker cp temp-ghost:/var/lib/ghost/config.production.json $(pwd)/testFolder/config.production.json # 停止临时容器 sudo docker stop temp-ghost
2. 执行正确的Docker Run命令
确保挂载的是文件到文件,同时修正你之前命令里的端口映射错误(Ghost默认容器端口是2368,你之前写的2376是笔误):
sudo docker run -d \ -e url=http://example.com \ --name myBlog6 \ -p 3006:2368 \ -v "$(pwd)/content6":/var/lib/ghost/content \ -v "$(pwd)/testFolder/config.production.json":/var/lib/ghost/config.production.json \ ghost:latest
验证效果
容器启动后,你可以查看宿主机的$(pwd)/testFolder/config.production.json文件,会发现它已经被容器的配置内容填充(如果用了方式二),或者被容器写入了默认配置(如果用了方式一)。后续修改这个文件后,重启容器即可生效。
内容的提问来源于stack exchange,提问作者Arturo
相关产品推荐
相关产品推荐

