如何从本地目录复制到 docker 命名卷并将其挂载到 NGINX 容器上?

Adr*_*ian 5 nginx docker docker-compose docker-swarm docker-volume

我想将一个public目录复制到命名卷中并将其挂载到所有 Nginx 容器中。

\n\n

这是我的 docker-compose.yml:

\n\n
version: \'3.7\'\nservices:\n  # http://localhost:8187/\n  nginx:\n    # build: .\n    image: nginx\n    # container_name: nginx\n    ports:\n      - "8187:80"\n    networks:\n      - public\n    volumes:\n      - nginx_logs:/var/log/nginx/\n      - nginx_public:/usr/share/nginx/html\n\n      # invalid mount config for type\xe2\x80\xa6\n      # - ./public:/usr/share/nginx/html:cached\n\n      # error: invalid mount config for type "bind": bind source path does not exist: /Users/admejiar/Code/uxer-analytics/events-hub/public"\n      # - type: bind\n      #   source: ./public\n      #   target: /usr/share/nginx/html\n\n\nnetworks:\n  public:\n\nvolumes:\n  nginx_logs:\n  nginx_public:\n    driver: local\n    driver_opts:\n      type: none\n      o: bind\n      device: $PWD/public\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

一切正常(查看完整配置(Nginx 除外):

\n\n
docker stack deploy -c docker-compose.yml events-hub\n
Run Code Online (Sandbox Code Playgroud)\n\n

Nginx 容器失败并显示:

\n\n

“无法安装本地卷:mount ./public:/var/lib/docker/volumes/events-hub_nginx_public/_data,标志:0x1000:没有这样的文件或目录”

\n\n
$ docker service ps events-hub_nginx --no-trunc                                                                                                                                                                                                                      v12.3.1\nID                          NAME                     IMAGE                                                                                  NODE                DESIRED STATE       CURRENT STATE             ERROR                                                                                                                                            PORTS\n5jdf3m5fgu4elr8ig0blc5wqq   events-hub_nginx.1       nginx:latest@sha256:eb3320e2f9ca409b7c0aa71aea3cf7ce7d018f03a372564dbdb023646958770b   node2               Ready               Rejected 1 second ago     "failed to mount local volume: mount ./public:/var/lib/docker/volumes/events-hub_nginx_public/_data, flags: 0x1000: no such file or directory"\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我检查指定的卷,我会得到以下信息:

\n\n
$ docker volume inspect events-hub_nginx_public                                                                                                                                                                                                                      v12.3.1\n[\n    {\n        "CreatedAt": "2019-07-27T00:01:56Z",\n        "Driver": "local",\n        "Labels": {\n            "com.docker.stack.namespace": "events-hub"\n        },\n        "Mountpoint": "/var/lib/docker/volumes/events-hub_nginx_public/_data",\n        "Name": "events-hub_nginx_public",\n        "Options": {\n            "device": "./public",\n            "o": "bind",\n            "type": "none"\n        },\n        "Scope": "local"\n    }\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为问题在于,将本地目录“public”复制到指定卷的部分没有发生。关于如何解决这个问题有什么想法吗?

\n