在 docker-compose 中挂载 NFS 卷时连接超时

Posted

技术标签:

【中文标题】在 docker-compose 中挂载 NFS 卷时连接超时【英文标题】:Connection timed out when mount NFS volume in docker-compose 【发布时间】:2020-10-09 15:13:03 【问题描述】:

我已经设置了 NFS 服务器,并且为端口 111 和 2049 打开了防火墙。 我有一个 NFS 客户端,还配置了 111 和 2049 端口。

服务器之间的连接对于上述端口工作正常

当我从 NFS 客户端手动挂载时,它已成功挂载。

但是,我想在我的 docker-compose 文件中创建 NFS 卷以直接挂载到 NFS 服务器。 但我收到一条连接超时消息

ERROR: for web  Cannot create container for service web: failed to mount local volume: 
mount :/root/app/django-static:/var/lib/docker/volumes/django-static/_data, data:
addr=x.x.x.x: connection timed out

这是我的 docker-compose 文件:

version: "3.2"
services:
  proxy:
    image: nginx-1-14:0.1
    depends_on:
      - web
    restart: always
    ports:
      - "80:80"
    volumes:
      - nginx-config:/etc/nginx
      - nginx-logs:/var/log/nginx
      - django-static:/code/static
      - django-media:/code/media

  web:
    image: django-app-v1
    restart: always
    ports:
      - "8000:8000"
    volumes:
      - django-static:/code/static
      - django-media:/code/media
    environment:
      - "DEBUG_MODE=False"
      - "DJANGO_SECRET_KEY="
      - "DB_HOST=x.x.x.x”
      - "DB_PORT=5432"
      - "DB_NAME=db"
      - "DB_USERNAME=user"
      - "DB_PASSWORD=password"

volumes:
  nginx-config:
  nginx-logs:
  django-static:
   driver_opts:
     type: "nfs"
     o: "addr=<NFS_IP>,rw"
     device: ":/root/app/django-static"
  django-media:
   driver_opts:
     type: "nfs"
     o: "addr=<NFS_IP>,rw"
     device: ":/root/app/django-media"

这是我在 NFS 服务器中的 /etc/exports:

/root/app/django-media   <NFS_client_IP>(rw,sync,no_root_squash)
/root/app/django-static           <NFS_client_IP>(rw,sync,no_root_squash)

I followed this article to setup NFS

因此,服务器和客户端之间的 NFS 配置正确 但是 docker 中的问题,因为它无法访问 NFS 服务器

是否需要 /etc/exports 文件中的特定端口或其他权限?

谢谢!

【问题讨论】:

【参考方案1】:

对于任何有同样问题的人

在我使用 NFS4 在 docker-compose 中创建卷后它起作用了

volumes:
 django-media:
   driver_opts:
     type: "nfs"
     o: "nfsvers=4,addr=<NFS_IP>”
     device: ":/root/app/django-media"
  django-static:
   driver_opts:
     type: "nfs"
     o: "nfsvers=4,addr=<NFS_IP>"
     device: ":/root/app/django-static"

【讨论】:

以上是关于在 docker-compose 中挂载 NFS 卷时连接超时的主要内容,如果未能解决你的问题,请参考以下文章

在不同 docker-compose 文件中描述并在不同 docker-machines 中运行的容器之间创建 NFS 共享

AIXAIX 开机自动挂载NFS共享

AIXAIX 开机自动挂载NFS共享

docker-compose:为绑定挂载和托管挂载定义挂载

如何判断(在 sh 中)一个目录是不是挂载在 NFS 上

shell编程笔记2--nfs挂载