Docker容器内的文件在主机上编辑后不会更新

3
我正在使用Docker,一切正常。
我可以使用docker-compose启动Docker镜像。原始答案是"最初的回答"。
docker-compose rm nodejs; docker-compose rm db; docker-compose up --build

我使用以下命令将 Shell 附加到 Docker 容器:

docker exec -it nodejs_nodejs_1 bash

我可以查看容器内的文件。 "Original Answer"翻译成"最初的答案"
(inside container)
cat server.js

现在,当我在主机上编辑server.js文件时,我希望容器内的文件可以随之更改,而无需重新启动Docker。
我尝试将volumes添加到docker-compose.yml文件或Dockerfile中,但不知何故无法使其正常工作。"最初的回答"
(Dockerfile, not working)
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
VOLUMES ["/usr/src/app"]

EXPOSE 8080
CMD [ "npm", "run", "watch" ]

或者

(docker-compose.yml, not working)
version: "3.3"
services:
  nodejs:
    build: ./nodejs-server
    ports:
      - "8001:8080"
    links:
      - db:db
    env_file:
      - ./.env-example
    volumes:
      - src: /usr/src/app
  db:
    build: ./mysql-server
    volumes:
      - ./mysql-server/data:/docker-entrypoint-initdb.d #A folder /mysql-server/data with a .sql file needs to exist
    env_file:
      - ./.env-example
volumes:
  src:

可能有一份简单的指南,但我还没有找到。

原始答案翻译成“最初的回答”。


1
在Compose文件中使用卷的方法如下:./path/to/application:/usr/src/app - Yarimadam
1个回答

1
如果您希望文件的副本在容器中可见,请使用绑定挂载卷(也称为主机卷),而不是命名卷。
假设您的docker-compose.yml文件位于根目录中,您希望将其放置在/usr/src/app中,则可以按照以下方式更改docker-compose.yml:
version: "3.3"
services:
  nodejs:
    build: ./nodejs-server
    ports:
      - "8001:8080"
    links:
      - db:db
    env_file:
      - ./.env-example
    volumes:
      - .:/usr/src/app
  db:
    build: ./mysql-server
    volumes:
      - ./mysql-server/data:/docker-entrypoint-initdb.d #A folder /mysql-server/data with a .sql file needs to exist
    env_file:
      - ./.env-example

在我的情况下,我想要的位置是在 /usr/src/app 中的子文件夹 nodejs-server。我将你的代码行 - .:/usr/src/app 改为 - ./nodejs-server:/usr/src/app,然后它就可以工作了 :-) - Hendrik Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接