When I mount local build directory to container /app/build, then excute docker-compose up, it will be generated a /app/build directory, expecting it exists on local build directory, but nothing on there.
If not mount, container /app/build directory has expected files
CodePudding user response:
What do you want to achieve? During the build step of docker compose the built package should be copied to the image. Afterwards it should be enough to start the image, without any need for mounting the volume with the built artifacts to the running container, as the files are already in the image.
docker compose build only modifies the content inside the build container, which is then written as layer to the built image.
As you see, the COPY ./package . from the Dockerfile does what's expected, but only inside the container. Also the following
RUN bash -c 'source ~/.nvm/nvm.sh \
&& nvm install 17.1.0 \
&& npm install'
Does what's expected, as the node_modules folder is present inside the container. You can verify this also by looking at the file timestamps.
To geht your desired behavior you could do the following:
docker run --rm -it -v ${pwd}:/app ubuntu:20.04 bash
apt update
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
cd /app
cp -Rv package/* .
source ~/.nvm/nvm.sh \
&& nvm install 17.1.0 \
&& npm install
touch build/x
exit
dir .\build\
As you see in the screenshot the filesystem outside the container is modified using this approach:
Summary:
- use
docker compose buildto build a project inside a container, without modifying the outside filesystem - use
docker run -v -v ${pwd}:/appif you want the build to modify the outside filesystem.



