source

도커: Windows 호스트에서 MariaDB/MySQL 부팅 실패

factcode 2022. 9. 16. 23:01
반응형

도커: Windows 호스트에서 MariaDB/MySQL 부팅 실패

Symfony 2 앱을 실행하기 위해 공식 mariadb 도커 이미지를 php-fpm 및 nginx와 함께 사용하려고 합니다.

이 방법은 마운트된 폴더에 모든 DB 파일을 보관하는 것입니다.Mac OS에서는 정상적으로 동작하지만 Windows 머신에서는 MariaDB가 기동하려고 할 때마다 에러가 발생합니다.이상한 점은 실제로 파일을 만들 수 있다는 것입니다. ibdata1 파일은 볼 수 있지만 크기는 0바이트입니다.또한 데이터 KB가 적은 2개의 aria_log 파일도 있습니다.이는 mysql이 실제로 거기에 쓸 수 있음을 의미합니다.

  • 사용하고 있다docker for windows 1.12.2 beta하지만 안정적인 것도 시도해봤어요.
  • 프로젝트를 저장하고 있는 Windows 디스크가 공유되어 있습니다(Docker for Windows UI의 "공유 드라이브" 섹션을 통해).
  • dir는 nginx이기 때문에 100% 쓸 수 있으며 mysql 자체도 로그를 넣을 수 있습니다.
  • 로그에서 알 수 있듯이 디스크 공간이 전혀 부족하지 않습니다.

도커 컴포지트 파일은 다음과 같습니다.

version: '2'
services:
db:
    image: mariadb
    ports:
        - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: test
        MYSQL_USER: root
        MYSQL_PASSWORD: root
    volumes:
        - ./docker-runtime/mysql:/var/lib/mysql
php:
    build: ./docker/php-fpm
    volumes:
        - ./:/var/www/symfony
        - ./docker-runtime/logs/symfony:/var/www/symfony/app/logs
    links:
        - db
nginx:
    build: ./docker/nginx
    ports:
        - "80:80"
    links:
        - php
    volumes_from:
        - php
    volumes:
        - ./docker-runtime/logs/nginx/:/var/log/nginx

로그에는 이렇게 적혀 있습니다.docker-compose up:

db_1     | 2016-10-18 13:14:06 7f79eed7f7c0 InnoDB: Error: Write to file ./ibdata1 failed at offset 0.
db_1     | InnoDB: 1048576 bytes should have been written, only 0 were written.
db_1     | InnoDB: Operating system error number 22.
db_1     | InnoDB: Check that your OS and file system support files of this size.
db_1     | InnoDB: Check also that the disk is not full or a disk quota exceeded.
db_1     | InnoDB: Error number 22 means 'Invalid argument'.
db_1     | InnoDB: Some operating system error numbers are described at
db_1     | InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] InnoDB: Error in creating ./ibdata1: probably out of disk space
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Plugin 'InnoDB' init function returned error.
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Unknown/unsupported storage engine: InnoDB
db_1     | 2016-10-18 13:14:06 140161674901440 [ERROR] Aborting

저는 지금 머리를 뽑고 있는 상황이기 때문에 이 문제에 대해 어떤 아이디어라도 주시면 감사하겠습니다.

허가 문제가 있는 것 같습니다.docker-compose.yml을 폐기하려면 명명된 볼륨을 사용하도록 변경합니다.

version: '2'
services:
db:
    image: mariadb
    ports:
        - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: test
        MYSQL_USER: root
        MYSQL_PASSWORD: root
    volumes:
        - mysql:/var/lib/mysql
php:
    build: ./docker/php-fpm
    volumes:
        - ./:/var/www/symfony
        - ./docker-runtime/logs/symfony:/var/www/symfony/app/logs
    links:
        - db
nginx:
    build: ./docker/nginx
    ports:
        - "80:80"
    links:
        - php
    volumes_from:
        - php
    volumes:
        - ./docker-runtime/logs/nginx/:/var/log/nginx
volumes:
  mysql:

mysql 오류가 사라졌는지 확인합니다.

안부 전해요

MariaDB를 시작할 때 이 옵션을 추가해야 합니다(Dockerfile의CMD또는 도킹 스테이션command:):

--innodb-flush-method=fsync

다음 문서에 기재되어 있습니다.https://github.com/docker-library/mariadb/issues/95

도움이 되지 않는 경우는, 추가--innodb-use-native-aio=0.
Windows 또는 Mac OS X에서는 비동기 I/O가 지원되지 않습니다.
https://dev.mysql.com/doc/refman/8.0/en/innodb-linux-native-aio.html

언급URL : https://stackoverflow.com/questions/40109596/docker-mariadb-mysql-startup-fails-on-windows-host

반응형