Docker - chown:更改“/data/db”的所有权:不允许操作

Cod*_*mer 10 mongodb docker docker-volume

我正在尝试使用 Docker 运行我的应用程序,这是我的 yml 文件内容来运行 mongo 容器。

\n
 services:\n   mongodb:\n    image: mongo:3.4\n    #    ports:\n    #        - "27017:27017"\n    volumes:\n      - ./data/mongo:/data/db\n    restart: always\n
Run Code Online (Sandbox Code Playgroud)\n

并在 contianer 中收到此错误:(运行 docker log 命令后看到此错误)

\n
\n

chown:更改“/data/db”的所有权:不允许操作

\n
\n

主机有 ./data/mongo 文件夹,以下是详细信息。

\n
drwxrwxrwx  2 nfsnobody nfsnobody 4096 May 11 23:13 mongo\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试按照其中一个论坛的建议在主机上运行它。

\n
sudo chgrp 1000 ./data/mongo\n
Run Code Online (Sandbox Code Playgroud)\n

不知道这将如何帮助解决问题,因为我们得到的错误是在容器文件夹中而不是来自主机的错误,无论如何我都尝试过。

\n

但得到了这样的回应:

\n
\n

chgrp:更改 \xe2\x80\x98mongo\xe2\x80\x99 组:不允许操作

\n
\n

如何解决这个问题?除了“chgrp”之外还有其他解决方案吗?谢谢。

\n

这是完整的 docker-compose.yml 文件

\n
## You can generate a custom docker compose file automatically on http://reportportal.io/download (Step 2)\n\n## This is example of Docker Compose for ReportPortal\n## Do not forget to configure data volumes for production usage\n\n## Execute 'docker-compose -p reportportal up -d --force-recreate'\n## to start all containers in daemon mode\n## Where:\n##      '-p reportportal' -- specifies container's prefix (project name)\n##      '-d' -- enables daemon mode\n##      '--force-recreate' -- forces re-recreating of all containers\n\nversion: '2'\n\nservices:\n\n  mongodb:\n    image: mongo:3.4\n    #    ports:\n    #        - "27017:27017"\n    volumes:\n      - ./data/mongo:/data/db\n    restart: always\n\n  registry:\n    image: consul:1.0.6\n    volumes:\n      - ./data/consul:/usr/share/consul/data\n#    ports:\n#      - "8500:8500"\n#      - "8300:8300"\n#      - "53:8600/udp"\n    command: "agent -server -bootstrap-expect=1 -ui -client 0.0.0.0"\n    environment:\n      - 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}'\n    restart: always\n\n\n  uat:\n    image: reportportal/service-authorization:4.2.0\n    #ports:\n    #  - "9999:9999"\n    depends_on:\n      - mongodb\n    environment:\n      - RP_PROFILES=docker\n      - RP_SESSION_LIVE=86400 #in seconds\n    #      - RP_MONGO_URI=mongodb://localhost:27017\n    restart: always\n\n  ### Another option for gateway\n  ### Can be used instead of traefik\n  #  gateway:\n  #    image: fabiolb/fabio:1.5.8-go1.10\n  #    ports:\n  #      - "9998:9998" # GUI/management\n  #      - "8080:9999" # HTTP exposed\n  #    environment:\n  #      - FABIO_REGISTRY_CONSUL_ADDR=registry:8500\n  #      - FABIO_REGISTRY_CONSUL_REGISTER_NAME=gateway\n  #      - FABIO_PROXY_ADDR=:9999;rt=300s;wt=300s\n  #    restart: always\n\n\n\n  gateway:\n    image: traefik:1.6.6\n    ports:\n      - "4444:8080" # HTTP exposed\n      - "8081:8081" # HTTP Administration exposed\n#    expose:\n#      - '8080'\n    command:\n      - --consulcatalog.endpoint=registry:8500\n      - --defaultEntryPoints=http\n      - --entryPoints=Name:http Address::8080\n      - --web\n      - --web.address=:8081\n    restart: always\n\n  index:\n    image: reportportal/service-index:4.2.0\n    environment:\n      - RP_SERVER_PORT=8080\n      - RP_PROXY_CONSUL=true\n    depends_on:\n      - registry\n      - gateway\n    restart: always\n\n  api:\n    image: reportportal/service-api:4.3.0\n    depends_on:\n      - mongodb\n    environment:\n      - RP_PROFILES=docker\n      - JAVA_OPTS=-Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp\n    #      - RP_MONGO_URI=mongodb://localhost:27017\n    restart: always\n\n  ui:\n    image: reportportal/service-ui:4.3.0\n    environment:\n      - RP_SERVER.PORT=8080\n      - RP_CONSUL.TAGS=urlprefix-/ui opts strip=/ui\n      - RP_CONSUL.ADDRESS=registry:8500\n    restart: always\n\n  analyzer:\n    image: reportportal/service-analyzer:4.3.0\n    depends_on:\n      - registry\n      - gateway\n      - elasticsearch\n    restart: always\n\n  elasticsearch:\n    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.1\n    restart: always\n    volumes:\n      - ./data/elasticsearch:/usr/share/elasticsearch/data\n    environment:\n      - bootstrap.memory_lock=true\n    ulimits:\n      memlock:\n        soft: -1\n        hard: -1\n      nofile:\n        soft: 65536\n        hard: 65536\n  #    ports:\n  #        - "9200:9200"\n\n  jira:\n    image: reportportal/service-jira:4.0.0\n    environment:\n      - RP_PROFILES=docker\n    #     - RP_MONGO_URI=mongodb://localhost:27017\n    restart: always\n\n  rally:\n    image: reportportal/service-rally:4.3.0\n    environment:\n      - RP_PROFILES=docker\n    #     - RP_MONGO_URI=mongodb://localhost:27017\n    restart: always\n
Run Code Online (Sandbox Code Playgroud)\n

ane*_*yte 9

/data/configdb如果以 root 身份运行,Mongo 启动脚本会更改文件的所有权/data/db。尝试以nfsnobody( local 的所有者./data/mongo)身份运行它以跳过此步骤:

services:
  mongodb:
    user: "nfsnobody" # insert either uid or name of the user
Run Code Online (Sandbox Code Playgroud)


Sai*_*ish 5

我试图在这里回答类似的问题 - /sf/answers/5126720441/

简而言之,我们可以挂载到路径/data而不是/data/db. 这样,mongo就可以在/data/db内部执行chown了。