我有docker-compose文件用于提供多个容器。
主要思想:通过webpack构建前端应用程序,然后通过卷授予对nginx容器的构建文件的访问权限。不幸的是,我尝试了很多东西(偶然发现我在容器启动但没有建立时附加了关于卷的附加知识)并且我当前的设置如下:
搬运工-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被复制得很好)
在我的主机上,我有所有已安装的文件夹但是......空了。没有。文件不存在。
我在这里错过了一般概念吗?
谢谢!