Docker:如何在两个容器之间共享文件夹

我正在开发一个应用程序,其中有一个运行openresty的web服务器和一个运行php应用程序的容器,前端使用vue。

version: '3'
services:
  php:
    build: ./
    volumes:
      - ./services/php/php.ini:/usr/local/etc/php/php.ini

  web:
    build: ./services/openresty
    ports:
      - "8888:80"
    volumes:
      - ./services/openresty/company.conf:/usr/local/openresty/nginx/conf/nginx.conf
      - ./services/openresty/bodyconfig.conf:/etc/openresty/nginx/conf/bodyconfig.conf

在构建应用程序时,我的vue代码将构建到php容器内的dist文件夹中:

FROM php:7.3-fpm-alpine

RUN apk update \
    && apk add  --no-cache git curl libmcrypt libmcrypt-dev openssh-client icu-dev \
    libxml2-dev bash freetype-dev libpng-dev libjpeg-turbo-dev nodejs npm libzip-dev g++ make autoconf postgresql-dev \
    && docker-php-source extract \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && docker-php-source delete \
    && docker-php-ext-install pdo_pgsql soap intl gd zip \
    && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && rm -rf /tmp/*

CMD ["php-fpm", "-F"]

WORKDIR /var/www/company

COPY ./ ./

RUN bash ./docker_build.sh

EXPOSE 9000

docker_build.sh

cd /var/www/company/js

npm install
npm run build

现在,在php容器中有一个名为dist的文件夹。

nginx需要使用这个文件夹,因为它包含一个静态的index.html,由nginx这样提供服务

location / {
    alias /var/www/company/dist/;
    try_files $uri $uri/ /index.html;
}

我想知道如何使我的web容器访问位于php容器内的构建文件夹dist

谢谢。

点赞
用户5460216
用户5460216

你可以使用 绑定挂载 来将主机上的文件夹挂载到容器中。

绑定挂载

当你使用绑定挂载时,主机上的文件或目录会被挂载到容器中。文件或目录会使用主机机器上的完整路径或相对路径来引用。

或者,你可以使用 Docker 卷 并将该卷附加到两个容器中。

Docker 卷

卷是持久化 Docker 容器生成和使用的数据的首选机制。虽然绑定挂载依赖于主机机器的目录结构,但卷完全由 Docker 管理。

编辑: 查看 Docker 卷的官方文档实现

2019-08-21 12:45:10