【发布时间】:2020-01-26 08:18:37
【问题描述】:
一些背景...
我正在尝试为 Ghost 博客构建 Docker 映像。我只是添加一个模块:一个存储适配器,以便图像托管在 S3 而不是本地文件系统上(默认设置)。
在storage adapter plugin的README中,安装说明是将模块复制到app的工作目录中:
npm install ghost-storage-adapter-s3
mkdir -p ./content/adapters/storage
cp -r ./node_modules/ghost-storage-adapter-s3 ./content/adapters/storage/s3
这有效——但仅限于容器的内部。我想在 Docker 构建中运行这些步骤,这样如果我的容器重新启动,我就不会丢失这些更改。
问题
在我的 Dockerfile 中,我有:
FROM ghost:3
RUN npm install ghost-storage-adapter-s3
RUN mkdir -p ./content/adapters/storage
RUN cp -r ./node_modules/ghost-storage-adapter-s3/ ./content/adapters/storage/s3
它会抛出这个错误:cp: cannot create directory './content/adapters/storage/s3': No such file or directory
当我退后一步尝试一次创建一个目录并验证它是否已创建时,即
RUN ls ./content
RUN mkdir ./content/adapters
RUN ls ./content/adapters
我收到此错误:
Step 8/10 : RUN ls ./content/adapters
---> Running in c55848f39bb4
ls: cannot access './content/adapters': No such file or directory
The command '/bin/sh -c ls ./content/adapters' returned a non-zero code: 2
我刚刚创建后怎么可能没有“没有这样的目录”?
我在创建文件夹 mkdir -m 777 ./content/adapters 时尝试设置 chmod 权限,并将所有者更新为我当前的用户(root):RUN chown -R root ./content,但没有效果。
我至少可以通过更改 ./ 目录前缀来构建它,但这会将 /content 放在应用程序根目录中,这不是他们需要的位置。当我指定完整路径 /var/lib/ghost/content/adapters/storage 时,我得到了同样的错误。这似乎是一个权限问题,但我不知道。
任何帮助将不胜感激。
【问题讨论】:
-
需要使用
COPY/ADD指令从宿主机复制到容器。 -
@funnydman 我不希望我的 docker 镜像依赖于宿主容器,它应该能够自己构建它需要的一切
标签: linux docker unix ghost-blog