docker compose卷未同步 问题

docker compose卷未同步 问题,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我使用docker compose进行Python/Flask开发。我希望我的主机代码库与docker容器内的代码库同步,但不 处境 我的工作目录结构如下: . ├── Dockerfile ├── docker-compose.yml ├── app.py └── requirements.txt 我将装载从主机的当前目录绑定到容器的/app Dockerfile: FROM python:3.7.3-alpine3.9 WORKDIR /app COPY requirements.tx

我使用docker compose进行Python/Flask开发。我希望我的主机代码库与docker容器内的代码库同步,但不

处境 我的工作目录结构如下:

.
├── Dockerfile
├── docker-compose.yml
├── app.py
└── requirements.txt
我将装载从主机的当前目录绑定到容器的
/app

Dockerfile:

FROM python:3.7.3-alpine3.9

WORKDIR /app

COPY requirements.txt requirements.txt

RUN pip install --upgrade pip && \
  pip install -r requirements.txt

COPY . .

CMD gunicorn -b 0.0.0.0:9000 -w 4 app:app
docker-compose.yml:

version: '3'
services:
  web:
    build: .
    ports:
      - "4649:9000"
    volumes:
      - .:/app
当我访问
http://localhost:4649
我可以看到正确的响应,因此Docker容器工作正常。但是,当我更改
app.py
时,响应不会更新

我检查了集装箱,结果如下

"Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/emp-mac-zakiooo/dev/jinja-pwa",
                "Destination": "/app",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

它看起来非常正确,所以我不知道这个问题您可以通过执行以下操作来实现这一点:

volumes:
    mount:
        driver: local
        driver_opts:
          type: nfs
          o: addr=host.docker.internal,rw,nolock,hard,nfsvers=3
          device: ":${PWD}/path"
version: '3'
services:
  web:
    build: .
    ports:
      - "4649:9000"
    volumes:
      - mount:/app

在服务内的卷声明中,可以执行以下操作:

volumes:
    mount:
        driver: local
        driver_opts:
          type: nfs
          o: addr=host.docker.internal,rw,nolock,hard,nfsvers=3
          device: ":${PWD}/path"
version: '3'
services:
  web:
    build: .
    ports:
      - "4649:9000"
    volumes:
      - mount:/app

将以下内容添加到/etc/exports以启用docker对nfs卷的访问
127.0.0.1-alldirs-mapall=0:80
一旦出现,您需要运行
sudo-nfsd-restart
以包含您的更改

如果docker compose在使用NFS时停止响应,则重启docker通常会修复此问题


我希望这有帮助

OMG我发现我的文件已正确同步,但gunicorn缓存了它们,因此在
Dockerfile
中添加了
--reload
CMD
,最后修复了它。
谢谢你的帮助,很抱歉我的愚蠢

对我来说,问题是
WORKDIR
volumes
配置不匹配。其中一个显示为
/usr/src/app
,另一个显示为
/app
。一旦我确定了
docker compose.yml
Dockerfile
都列出了
/usr/src/app
,它就开始将我的容器卷与我的Mac OS卷同步。谢谢