首页 > 解决方案 > 在特定路径上安装 docker 卷

问题描述

我正在尝试使用 docker 容器部署照片流( https://github.com/maxvoltar/photo-stream )。Photo-stream 是一个用于自托管的图片发布网站。它期望它的图片在一个名为“photos/original/”的路径中,相对于它的安装位置。它将在“photos/”下创建其他目录来缓存缩略图等。

当我用一些图片填充该目录并从其构建目录本地启动应用程序(没有 docker)时,使用:

$ bundle exec jekyll serve --host 0.0.0.0

它向我显示了我放在该目录中的图片。在 docker 容器中运行应用程序时,我需要它来安装一个包含路径“照片/原始”的卷,以便我可以将图片保存在那里。我在安装在 /mnt/data/ 的磁盘上创建了此路径。

为了做到这一点,我在现有的 Dockerfile 中添加了一个卷行:

FROM ruby:latest
ENV VIPSVER 8.9.1
RUN apt update && apt -y upgrade && apt install -y build-essential
RUN wget -O ./vips-$VIPSVER.tar.gz https://github.com/libvips/libvips/releases/download/v$VIPSVER/vips-$VIPSVER.tar.gz
RUN tar -xvzf ./vips-$VIPSVER.tar.gz && cd vips-$VIPSVER && ./configure && make && make install
COPY ./ /photo-stream 
WORKDIR /photo-stream
RUN ruby -v && gem install bundler jekyll && bundle install
VOLUME /photo-stream/photos 
EXPOSE 4000
ENTRYPOINT bundle exec jekyll serve --host 0.0.0.0

我以这种方式构建容器:

$ docker build --tag photo-stream:1.0 .

我以这种方式运行容器:

$ docker run -d -p 4000:4000 -v /mnt/data/photos/:/photos/ --name ps photo-stream:1.0

我期待显示目录 /mnt/data/photos 的内容。相反,没有显示任何内容。但是,会创建一个卷“/var/lib/docker/volumes/e5ff426ced2a5e786ced6b47b67d7dee59160c60f59f481516b638805b731902/_data”,当其中填充有图片时,会显示这些。

标签: dockerdockerfile

解决方案


推荐阅读