我有docker-compose文件用于提供多个容器 .

主要思想:通过webpack构建前端应用程序,然后通过卷授予对nginx容器的构建文件的访问权限 . 不幸的是,我尝试了很多东西(偶然发现我在容器启动但没有 Build 时附加了关于卷的附加知识)并且我当前的设置如下所示:

泊坞窗,compose.yml

version: '2'
services:
  nginx:
    build:
      context: .
      dockerfile: nginx.dockerfile
    ports:
      - '10040:80'
    depends_on:
      - app
    volumes:
        - './docker/app/src:/app/src'
        - './docker/app/dist:/app/dist'
        - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
  app:
    build:
      context: .
      dockerfile: ./app.dockerfile
    entrypoint: ./app-build-dev.sh
    volumes:
        - './docker/app/src:/app/src/:rw'
        - './docker/app/dist:/app/dist/:rw'
        - './docker/app/node_modules:/app/node_modules/:rw'

这是app.dockerfile的dockerfile

FROM "node"

COPY . /build-dir

WORKDIR /build-dir

RUN rm -rf node_modules
RUN rm -rf dist

这是我的webpack容器脚本(app-build-dev.sh):

#!/bin/sh

cd /build-dir


# echo "CHECKING INNARDS OF /app/src"
# ls -la /app/src

# echo "CHECKING INNARDS OF /app/src/js/app"
# ls -la /app/src/js/app

npm i
npm run build-dev

echo "CHECKING INNARDS OF /build-dir"
ls -la /build-dir

echo "CHECKING INNARDS OF /build-dir/src"
ls -la /build-dir/src

echo "CHECKING INNARDS OF /build-dir/dist"
ls -la /build-dir/dist

# echo "Checking index.html built"
# cat /build-dir/dist/index.html

echo "Copying everything into /app so it can be shared with nginx"
cp -R /build-dir/* /app/*

echo "CHECKING INNARDS OF /app/src"
ls -la /app/src

echo "CHECKING INNARDS OF /app/dist"
ls -la /app/dist

echo "Done"

正如你所看到的,我试图以某种方式欺骗卷,因为如果我直接在卷中工作(在容器中的/ app中) - webpack甚至找不到所需的文件并为index.html保存损坏的一个文件,并且消息说没有这样的文件 . 但那有点不合时宜 .

无论如何,我构建内部/ build-dir然后复制到容器内的已装入卷文件夹,因此它将被镜像到主机(然后可以由nginx容器使用) .

我从那个.sh脚本得到的 . 一切都很好,除了/ app / dist dir在容器中是空的(/ src被复制好了)

在我的主机上我有所有挂载的文件夹但是......空的 . 没有 . 文件不在那里 .

我在这里错过了一般概念吗?

谢谢!