我正在寻找一种方法,可以在一个Docker容器中与另一个共享一个任意目录,但又不能在容器创建之间持久化卷。
用例是在Web应用程序和Web服务器(如Nginx)之间共享静态资产。两个容器均由图像构建。构建Web应用程序的Dockerfile
时,会将静态资产复制到/var/www/public
之类的目录中。我想避免持久化卷,因为在构建Web应用程序时会更新静态资产。
我已经尝试过使用类似于以下内容的docker-compose.yml
进行此操作,但不幸的是,这样可以保留该卷,并且当使用新映像重新创建容器时,共享卷的内容不会更新。 / p>
version: '3.5'
services:
web:
image: bswinnerton/nyc-restaurant-grades
networks:
- backend
volumes:
- www_data:/var/www/app/
nginx:
image: nginx
depends_on:
- web
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- www_data:/var/www/app/
networks:
- backend
volumes:
www_data:
networks:
backend:
Web应用程序的Dockerfile
看起来像这样:
FROM ruby:2.5.1
# Install dependencies
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# Set working directory, where the commands will be ran:
RUN mkdir -p /var/www/app
WORKDIR /var/www/app
# Adding gems
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --jobs 20 --retry 5
# Adding project files
COPY . .
# Precompile assets
RUN bundle exec rails assets:precompile
CMD [ "bundle", "exec", "puma", "-C", "config/puma.rb" ]
我考虑过使用tmpfs
挂载,但是看来它们无法在容器之间共享。
答案 0 :(得分:0)
如果您希望在Docker / Compose环境中执行此操作,我可能只使用磁盘上的文件夹,并在启动容器时对其进行配置。另一种选择是让构建管道使用docker cp
将文件从一个映像复制到另一个映像,再复制到构建环境,并在后续的Dockerfile中复制COPY
(假设它们是静态文件)。
如果您希望在Kubernetes中进行此操作,则可以使用emptyDir卷和具有多个容器(边车)的吊舱来实现。