Docker-Chown:更改‘/data/db’的所有权:不允许操作

xt0899hw  于 2022-10-23  发布在  Docker
关注(0)|答案(4)|浏览(270)

我正在尝试使用Docker运行我的应用程序,下面是运行mongo容器的YML文件内容。

services:
   mongodb:
    image: mongo:3.4
    #    ports:
    #        - "27017:27017"
    volumes:
      - ./data/mongo:/data/db
    restart: always

并在contianer中收到此错误:(在运行docker Logs命令后看到此错误)
Chown:更改‘/data/db’的所有权:不允许操作
主机有./data/mongo文件夹,下面是详细信息。

drwxrwxrwx  2 nfsnobody nfsnobody 4096 May 11 23:13 mongo

我试着按照其中一个论坛中的建议在主机上运行这个程序。

sudo chgrp 1000 ./data/mongo
  • 不确定这将如何帮助解决问题,因为我们得到的错误是包含容器文件夹,而不是来自主机的错误,无论如何我都尝试了。*

但得到的回应是这样的:
Chgrp:正在更改‘mongo’的组:不允许操作
如何解决这个问题?除了“chgrp”,还有其他解决办法吗?谢谢。
以下是完整的docker-compose.yml文件


## You can generate a custom docker compose file automatically on http://reportportal.io/download (Step 2)

## This is example of Docker Compose for ReportPortal

## Do not forget to configure data volumes for production usage

## Execute 'docker-compose -p reportportal up -d --force-recreate'

## to start all containers in daemon mode

## Where:

## '-p reportportal' -- specifies container's prefix (project name)

## '-d' -- enables daemon mode

## '--force-recreate' -- forces re-recreating of all containers

version: '2'

services:

  mongodb:
    image: mongo:3.4
    #    ports:
    #        - "27017:27017"
    volumes:
      - ./data/mongo:/data/db
    restart: always

  registry:
    image: consul:1.0.6
    volumes:
      - ./data/consul:/usr/share/consul/data

# ports:

# - "8500:8500"

# - "8300:8300"

# - "53:8600/udp"

    command: "agent -server -bootstrap-expect=1 -ui -client 0.0.0.0"
    environment:
      - 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}'
    restart: always

  uat:
    image: reportportal/service-authorization:4.2.0
    #ports:
    #  - "9999:9999"
    depends_on:
      - mongodb
    environment:
      - RP_PROFILES=docker
      - RP_SESSION_LIVE=86400 #in seconds
    #      - RP_MONGO_URI=mongodb://localhost:27017
    restart: always

  ### Another option for gateway
  ### Can be used instead of traefik
  #  gateway:
  #    image: fabiolb/fabio:1.5.8-go1.10
  #    ports:
  #      - "9998:9998" # GUI/management
  #      - "8080:9999" # HTTP exposed
  #    environment:
  #      - FABIO_REGISTRY_CONSUL_ADDR=registry:8500
  #      - FABIO_REGISTRY_CONSUL_REGISTER_NAME=gateway
  #      - FABIO_PROXY_ADDR=:9999;rt=300s;wt=300s
  #    restart: always

  gateway:
    image: traefik:1.6.6
    ports:
      - "4444:8080" # HTTP exposed
      - "8081:8081" # HTTP Administration exposed

# expose:

# - '8080'

    command:
      - --consulcatalog.endpoint=registry:8500
      - --defaultEntryPoints=http
      - --entryPoints=Name:http Address::8080
      - --web
      - --web.address=:8081
    restart: always

  index:
    image: reportportal/service-index:4.2.0
    environment:
      - RP_SERVER_PORT=8080
      - RP_PROXY_CONSUL=true
    depends_on:
      - registry
      - gateway
    restart: always

  api:
    image: reportportal/service-api:4.3.0
    depends_on:
      - mongodb
    environment:
      - RP_PROFILES=docker
      - JAVA_OPTS=-Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp
    #      - RP_MONGO_URI=mongodb://localhost:27017
    restart: always

  ui:
    image: reportportal/service-ui:4.3.0
    environment:
      - RP_SERVER.PORT=8080
      - RP_CONSUL.TAGS=urlprefix-/ui opts strip=/ui
      - RP_CONSUL.ADDRESS=registry:8500
    restart: always

  analyzer:
    image: reportportal/service-analyzer:4.3.0
    depends_on:
      - registry
      - gateway
      - elasticsearch
    restart: always

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.1
    restart: always
    volumes:
      - ./data/elasticsearch:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
  #    ports:
  #        - "9200:9200"

  jira:
    image: reportportal/service-jira:4.0.0
    environment:
      - RP_PROFILES=docker
    #     - RP_MONGO_URI=mongodb://localhost:27017
    restart: always

  rally:
    image: reportportal/service-rally:4.3.0
    environment:
      - RP_PROFILES=docker
    #     - RP_MONGO_URI=mongodb://localhost:27017
    restart: always
z31licg0

z31licg01#

看起来您已经打开了用户命名空间重新Map。
在您的主机中打开下面的文件
/etc/sysconfig/docker
并添加/修改这些选项,如下所示,如果需要,用您的用户替换根用户

OPTIONS='--userns-remap=root:root'
kkbh8khc

kkbh8khc2#

我试着在这里回答一个类似的问题-https://stackoverflow.com/a/73238863/1294667
简而言之,我们可以装载到路径/data,而不是/data/db。这样,mongo就可以在内部对/data/db执行chown。

qyzbxkaa

qyzbxkaa3#

与Windows或Mac主机共享卷可能是有限的或硬的(请参阅https://github.com/docker-library/mongo/issues/232#issuecomment-355423692).我在arm64Mac和Rancher Desktop上也遇到了类似的问题,我决定删除volume,但启动mongo容器仍然有问题。
如果您并不真正需要共享卷,只需要解决错误,扩展底座-台式机解决方案可能是:

services:
    mongodb:
        container_name: mongodb
        restart: always
        image: mongo
        volumes:
          - mongodata:/data/db
        ports:
          - '27017:27017'

volumes:
  mongodata:
    external: true
j0pj023g

j0pj023g4#

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

services:
  mongodb:
    user: "nfsnobody" # insert either uid or name of the user

相关问题