首页 > 解决方案 > 如何从本地目录复制到名为卷的 docker 并将其挂载到 NGINX 容器上?

问题描述

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

这是我的 docker-compose.yml:

version: '3.7'
services:
  # http://localhost:8187/
  nginx:
    # build: .
    image: nginx
    # container_name: nginx
    ports:
      - "8187:80"
    networks:
      - public
    volumes:
      - nginx_logs:/var/log/nginx/
      - nginx_public:/usr/share/nginx/html

      # invalid mount config for type…
      # - ./public:/usr/share/nginx/html:cached

      # error: invalid mount config for type "bind": bind source path does not exist: /Users/admejiar/Code/uxer-analytics/events-hub/public"
      # - type: bind
      #   source: ./public
      #   target: /usr/share/nginx/html


networks:
  public:

volumes:
  nginx_logs:
  nginx_public:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: $PWD/public

使用此命令(Nginx 除外)一切正常(参见完整配置):

docker stack deploy -c docker-compose.yml events-hub

Nginx 容器失败:

“未能挂载本地卷:挂载./public:/var/lib/docker/volumes/events-hub_nginx_public/_data,标志:0x1000:没有这样的文件或目录”

$ docker service ps events-hub_nginx --no-trunc                                                                                                                                                                                                                      v12.3.1
ID                          NAME                     IMAGE                                                                                  NODE                DESIRED STATE       CURRENT STATE             ERROR                                                                                                                                            PORTS
5jdf3m5fgu4elr8ig0blc5wqq   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"

如果我检查命名卷,我有以下内容:

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

我认为问题在于,将我的本地目录“公共”复制到命名卷的部分没有发生。关于如何解决这个问题的任何想法?

标签: dockernginxdocker-composedocker-swarmdocker-volume

解决方案


推荐阅读