我有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被复制好了)
在我的主机上我有所有挂载的文件夹但是......空的 . 没有 . 文件不在那里 .
我在这里错过了一般概念吗?
谢谢!