IT

OS X의 mariadb 도커 컨테이너: 데이터베이스 디렉토리를 작성할 수 없습니다.

itgroup 2022. 11. 18. 21:34
반응형

OS X의 mariadb 도커 컨테이너: 데이터베이스 디렉토리를 작성할 수 없습니다.

OSX에서 mariadb에 문제가 있어 CentOS에서도 같은 방법으로 동작하고 있습니다.따라서 OSX의 문제여야 합니다.

mariadb:
  image: mariadb:latest
  container_name: mariadb
  ports:
    - "3306:3306"
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: XXXXXXXX
  volumes:
    - /Users/sandro/Code/mysql:/var/lib/mysql

로그에 다음 오류가 있습니다.

mkdir: cannot create directory '/var/lib/mysql//mysql': Permission denied
Fatal error Can't create database directory '/var/lib/mysql//mysql'

이렇게 컨테이너 안에 장착하면:

volumes:
        - /var/lib/mysql

동작하지만 VM을 재시작하면 dbs가 사라지기 때문에 지속성 문제가 발생합니다.

mysql dir를 생성하여 world writable 권한을 부여하려고 했지만 다음 오류가 발생했습니다.

2016-05-20 23:43:54 140694234605504 [Note] mysqld (mysqld 10.1.14-MariaDB-1~jessie) starting as process 1 ...
2016-05-20 23:43:54 140694234605504 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: The InnoDB memory heap is disabled
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Memory barrier is not used
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Using Linux native AIO
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Using SSE crc32 instructions
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2016-05-20 23:43:54 140694234605504 [Note] InnoDB: Completed initialization of buffer pool
2016-05-20 23:43:54 140694234605504 [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
2016-05-20 23:43:54 140694234605504 [ERROR] InnoDB: The system tablespace must be writable!
2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'InnoDB' init function returned error.
2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2016-05-20 23:43:54 140694234605504 [ERROR] mysqld: File '/var/lib/mysql/aria_log_control' not found (Errcode: 13 "Permission denied")
2016-05-20 23:43:54 140694234605504 [ERROR] mysqld: Got error 'Can't open file' when trying to use aria control file '/var/lib/mysql/aria_log_control'
2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'Aria' init function returned error.
2016-05-20 23:43:54 140694234605504 [ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
2016-05-20 23:43:54 140694234605504 [Note] Plugin 'FEEDBACK' is disabled.
2016-05-20 23:43:54 140694234605504 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
2016-05-20 23:43:54 140694234605504 [ERROR] Unknown/unsupported storage engine: InnoDB
2016-05-20 23:43:54 140694234605504 [ERROR] Aborting

사용자 1000으로 mysql 컨테이너를 실행합니다.

도커 파일:

USER "1000"

in docker-compose.yml

db:
   image: mysql
   user: "1000"

이것이 현재의 회피책입니다(docker-compose.yml 경유).1000 사용자는 도커 볼륨(적어도 도커 머신용)에 있는 파일의 기본 사용자이므로 볼륨에 쓸 수 있습니다.

아마 허가 문제일 거예요Mac에서는 도커가 VM을 통해 로컬 디렉토리를 매핑하는 가상 상자에서 실행됩니다.허가를 받는 것은 어렵다.먼저 /Users/andro/Code 디렉토리에 대해 가장 제한적인 권한을 설정해 보십시오.또한 컨테이너를 시작하기 전에 /Users/sandro/Code/myssql 디렉토리를 미리 만들고 전역 쓰기 권한을 부여하십시오.

업데이트: 따라서 이 문제는 실제로 더 복잡합니다.컨테이너 내부의 사용자 ID가 도커 시스템을 시작한 사용자의 ID와 일치하지 않는 한 낮은 수준의 파일 호출을 많이 수행할 수 없는 것 같습니다.다음은 이 문제를 명확히 하는 링크입니다.

https://www.bountysource.com/issues/5393565-1-3-0-only-root-can-write-to-osx-volumes-can-t-change-permissions-within

https://github.com/boot2docker/boot2docker/issues/581

이 문제는 boot2docker, MariaDB 이미지 시작 스크립트, docker-compose 및 Virtual Box 게스트 운영 체제 간에 발생합니다.

이렇게 함으로써 maria db container를 실행할 수 있었습니다.

mkdir mysql
chmod ug+ws mysql
docker run -it -u $UID:$UID -e MYSQL_ROOT_PASSWORD=bob \
         -v /Users/vlad/Proj/Stack/maria/mysql:/var/lib/mysql \
         mariadb:latest

-u 옵션은

다음 오류 메시지에서 경로가 이상하게 표시됩니다.mkdir: cannot create directory '/var/lib/mysql//mysql': Permission denied

볼륨 패스에 mariadb 이미지가 /mysql을 추가하는 것처럼 보입니다.제거함으로써/mysqldocker-discl.yml 파일에서 아주 잘 작동했어요.

mdb:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: password
  volumes:
    - ./data:/var/lib

언급URL : https://stackoverflow.com/questions/37357315/mariadb-docker-container-on-os-x-cant-create-database-directory

반응형