Docker-Compose启动PostgreSQL出现错误,chown: 更改‘/var/lib/postgresql/data’的所有权:操作不允许。

5
我正在参与一个使用Docker的项目。这个项目在上周五之前一切正常,但今天我打开电脑(Mac mini - macOS Sierra版本10.12.5(16F73))时出现了错误。我试图运行docker-compose -f dev.yml -f docker-compose.yml up,但执行后返回以下消息:db_1 | chmod:更改“/ var / lib / postgresql / data”的权限:操作不允许。我已删除所有Docker容器和镜像docker rm $(docker ps -a -q)docker rmi $(docker images -q),但错误仍然存在。我的docker-compose.yml如下:
 version: '2'

 services:

 rabbitmq:
     restart: always
     image: rabbitmq:3.6
     environment:
       RABBITMQ_DEFAULT_USER: my_user
       RABBITMQ_DEFAULT_PASS: my_password
     ports:
       - "5672:5672"
       - "15672:15672"
   django:
     build: ./django
     command: gunicorn contactto.wsgi:application -b 0.0.0.0:8000
     environment: 
       - "TZ=Brazil/East"
     restart: always
     volumes: 
       - ./django:/usr/src/app
       - ./django/static:/usr/src/app/contactto/static
       - ./logs:/logs/
       - /asterisk/:/etc/asterisk/
     ports:
       - "8000:8000"
     links:
       - rabbitmq:rabbitmq
   node:
     build: ./node_6_8
     environment:
       - "TZ=Brazil/East"
     volumes_from:
       - django
   nginx:
     build: ./nginx
     restart: always
     environment: 
       - "TZ=Brazil/East"
     ports:
       - "80:80"
       - "443:443"
     volumes: 
       - /www/static
     volumes_from:
       - django
     links:
       - django:django
   worker:
     build: ./django
     command: su -m worker -c "celery worker -A contactto.celeryconf -Q default -n default@%h"
     environment: 
       - "TZ=Brazil/East"
     restart: always
     volumes:
       - ./django:/usr/src/app
       - ./django/static:/usr/src/app/contactto/static
       - ./logs:/logs/
       - /asterisk/:/etc/asterisk/
     links:
       - rabbitmq:rabbitmq

 volumes: 
   dbdata:

我的dev.yml文件内容如下:

version: '2'

services:
  db:
    image: postgres:9.5
    restart: always
    environment:
      POSTGRES_USER: my_user
      POSTGRES_PASSWORD: my_password
      POSTGRES_DB: my_db
    volumes:
      - /psqldata:/var/lib/postgresql/data
  django:
    environment:
      - "DJANGO_CONFIG_MODE=Development"
    depends_on:
      - db
  worker:
    environment:
      - "DJANGO_CONFIG_MODE=Development"
    links:
      - db:db

任何帮助都将不胜感激。

1
请发布您正在使用的 docker-compose.yml 文件。 - Ricardo Branco
好的,我现在已经插入了这个文件。 - Takashi Miyabe
我正在尝试使用mysql这种方法,但仍然收到db_1 | chown: changing ownership of '/var/lib/mysql/': Operation not permitted的错误提示。 - tylersDisplayName
2个回答

0
我在/进入并分析文件夹,然后设置命令ls -la,发现该文件夹是以root用户创建的。首先我删除了文件夹sudo rm -rf psqldata,然后设置权限sudo chmod 777 /以使用我的用户创建文件夹mkdir psqldata,现在它可以正常工作。我不知道为什么之前它能工作,突然就停止了。我希望这个答案也能对您有所帮助。
旧文件夹ls -la drwxr-xr-x 2 root wheel 68 Jun 19 14:58 psqldata 新文件夹ls -la drwxr-xr-x 2 gtmiyabe wheel 68 Jun 20 10:07 psqldata

2
sudo chmod 777 /???如果我理解正确,您刚刚向任何人打开了整个系统,让他们为所欲为! - Borjovsky
任何有系统访问权限的人 - mts
这绝对不应该是被接受的答案... - thepanuto

0
使用命名卷而不是绑定卷。
根据这个帮助了我解答: https://superuser.com/a/1781335 请注意左侧没有斜杠:
  • pg-data:/var/lib/postgresql/data

docker-compose.yml:

version: '3'
services:
  db:
    image: postgres
    volumes:
      - pg-data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  pg-data:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接