我发现这个问题是由我使用 docker-compose 的构建脚本引入的。
Docker-compose.yml
version: '3'
services:
# Web-server which is responsible for server-side rendering.
# It also add additional middleware layers when proxify requests
# for dependent systems such as API (for example enrich with auth data before sending).
web:
build:
context: .
dockerfile: ./docker/Dockerfile.web
ports:
- "${WEBSERVER_PORT}"
env_file:
- ./docker/web.env
volumes:
- assets:/web/dist/assets
command: ["yarn", "run", "_production"]
# Nginx used as proxy-wrapper which is placed before web-server.
# It's resposible for static files and proxy to web-server.
# It also can be used for proxify websocket connection to specific game server.
nginx:
build:
context: .
dockerfile: ./docker/Dockerfile.nginx
volumes:
- assets:/www/assets
ports:
- "80:${NGINX_PORT}"
env_file:
- ./docker/web.env
- ./nginx/nginx.env
depends_on:
- web
command: ["/bin/sh", "-c", "envsubst < /etc/nginx/templates/default.template > /etc/nginx/sites-enabled/default && nginx -g 'daemon off;'"]
volumes:
assets:
那里我使用了共享卷assets,再次启动docker-compose时没有清除它。
我已经使用这个命令构建:
rm -rf tmp && mkdir -p tmp && tar -czvf tmp/app.tar.gz src config .babelrc mq.json postcss.config.js webpack.*.js package.json yarn.lock && export $(cat ./docker/web.env | grep -v ^# | xargs) && docker-compose -p cruiserwars build,
我在那里准备了带有源代码的 tar.gz,设置了环境变量,然后使用docker-compose.yml 来构建我的项目。但是我忘了删除之前创建的卷......
所以解决方案是使用以下命令:
rm -rf tmp && mkdir -p tmp && tar -czvf tmp/app.tar.gz src config .babelrc mq.json postcss.config.js webpack.*.js package.json yarn.lock && export $(cat ./docker/web.env | grep -v ^# | xargs) && docker-compose down -v && docker-compose -p cruiserwars build,
你可以看到我添加了docker-compose down -v来停止容器并移除之前创建的卷。