我的容器基本上已经死了。我有一个 vite React 前端,我正在尝试将 main.jsx 的脚本标记更新为正确的路径,但它仍然显示为几个小时前的样子,并且我已经进行了多次更改。
之前我使用节点作为用户,但由于权限问题,我更改为 root 仅用于开发,但在运行 docker compose up 后,我仍然在容器中作为节点运行。它不仅不会更新容器,甚至在第一次构建时也不会更新。
我的html:
....html
<div id="root"></div>
<script type="module" src="./src/main.jsx"></script>
</body>
</html>
Docker 文件:
#backend
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
USER root
RUN npm install
COPY . .
EXPOSE 8000
CMD npm start
#frontend
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
USER root
RUN npm install
COPY . .
EXPOSE 5173
CMD npm run dev
撰写:
version: "3.8"
services:
web:
depends_on:
- api
build: ./frontend
ports:
- 5173:5173
environment:
VITE_API_URL: http://localhost:8000
develop:
watch:
- path: ./frontend/package.json
x-initialSync: true
action: rebuild
- path: ./frontend/package-lock.json
x-initialSync: true
action: rebuild
- path: ./frontend
x-initialSync: true
target: /app
action: sync
api:
depends_on:
- db
build: ./backend
ports:
- 8000:8000
environment:
DB_URL: mongodb://db/anime
develop:
watch:
- path: ./backend/package.json
x-initialSync: true
action: rebuild
- path: ./backend/package-lock.json
x-initialSync: true
action: rebuild
- path: ./backend
x-initialSync: true
target: /app
action: sync
db:
image: mongo:latest
ports:
- 27017:27017
volumes:
- anime:/data/db
volumes:
anime:
然后我运行 docker compose up --watch
docker exec -it 后端容器 sh
$ whoami
节点
猫索引.html
<div id="root"></div>
<script type="module" src="/mern-docker/frontend/src/main.jsx"></script>
</body>
</html>
docker compose up --build --watch 似乎是答案。奇怪的是,我正在观看的教程并没有明确说明这一点。我的印象是 docker compose up 会构建你的容器,即使文档这么说:
用法 docker compose up [选项] [服务...] ....... 构建、(重新)创建、启动并附加到服务的容器。
但显然这不是真的,你需要 --build 选项。