programing

외부 볼륨을 연결하는 동안 도커 구성과 문제를 사용하여 mariadb 10.4.8 도커 컨테이너를 사용하는 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다.

newsource 2023. 1. 10. 21:12

외부 볼륨을 연결하는 동안 도커 구성과 문제를 사용하여 mariadb 10.4.8 도커 컨테이너를 사용하는 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다.

Docker는 처음입니다.어플리케이션용으로 mariadb의 도커 컨테이너를 작성하려고 했는데 mariadb 컨테이너를 실행하면 사용자 'root'@'localhost' (패스워드:YES 사용)도커파일에 대한 액세스가 거부됩니다.

다음은 제가 사용하고 있는 도커 구성입니다.

version: '3'

services:
  mysql:
    image: mariadb
    container_name: mariadb
    volumes:
      - dbvolume:/var/lib/mysql
      - ./AppDatabase.sql:/docker-entrypoint-initdb.d/AppDatabase.sql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_ROOT_USER: root
      MYSQL_USER: root
      MYSQL_PASSWORD: root123
      MYSQL_DATABASE: appdata
    ports:
      - "3333:3306"

volumes:
  dbvolume:

몇 개의 링크를 참조해 여러 번 시도했지만 도커 컨테이너에 애플리케이션을 연결할 수 있었지만 AppDatabase Import에 실패했습니다.도커 컨테이너 작성 시 sql 스크립트를 사용합니다.

그러나 동일한 도커 구성 파일을 사용하여 mariadb를 응용 프로그램에 연결할 수 없습니다.또한 이 도커 구성 파일도 SQL 스크립트를 데이터베이스로 Import하지 않을 수 있습니다(내가 관찰한 로그에 근거함).

도커 구성 실행 중에 생성된 도커 로그를 다음에 나타냅니다.

$ docker logs 3fde358ff015
2019-09-24 17:40:37 0 [Note] mysqld (mysqld 10.4.8-MariaDB-1:10.4.8+maria~bionic) starting as process 1 ...
2019-09-24 17:40:37 0 [Note] InnoDB: Using Linux native AIO
2019-09-24 17:40:37 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-09-24 17:40:37 0 [Note] InnoDB: Uses event mutexes
2019-09-24 17:40:37 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-09-24 17:40:37 0 [Note] InnoDB: Number of pools: 1
2019-09-24 17:40:37 0 [Note] InnoDB: Using SSE2 crc32 instructions
2019-09-24 17:40:37 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
2019-09-24 17:40:37 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
2019-09-24 17:40:37 0 [Note] InnoDB: Completed initialization of buffer pool
2019-09-24 17:40:37 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2019-09-24 17:40:37 0 [Note] InnoDB: Upgrading redo log: 2*50331648 bytes; LSN=21810033
2019-09-24 17:40:38 0 [Note] InnoDB: Starting to delete and rewrite log files.
2019-09-24 17:40:38 0 [Note] InnoDB: Setting log file ./ib_logfile101 size to 50331648 bytes
2019-09-24 17:40:38 0 [Note] InnoDB: Setting log file ./ib_logfile1 size to 50331648 bytes
2019-09-24 17:40:38 0 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2019-09-24 17:40:38 0 [Note] InnoDB: New log files created, LSN=21810033
2019-09-24 17:40:38 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2019-09-24 17:40:38 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2019-09-24 17:40:38 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2019-09-24 17:40:38 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2019-09-24 17:40:38 0 [Note] InnoDB: Waiting for purge to start
2019-09-24 17:40:38 0 [Note] InnoDB: 10.4.8 started; log sequence number 21810033; transaction id 14620
2019-09-24 17:40:38 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-09-24 17:40:38 0 [Note] Plugin 'FEEDBACK' is disabled.
2019-09-24 17:40:38 0 [Note] Server socket created on IP: '::'.
2019-09-24 17:40:38 0 [Warning] 'proxies_priv' entry '@% root@c980daa43351' ignored in --skip-name-resolve mode.
2019-09-24 17:40:38 0 [Note] InnoDB: Buffer pool(s) load completed at 190924 17:40:38
2019-09-24 17:40:38 0 [Note] Reading of all Master_info entries succeeded
2019-09-24 17:40:38 0 [Note] Added new Master_info '' to hash table
2019-09-24 17:40:38 0 [Note] mysqld: ready for connections.
Version: '10.4.8-MariaDB-1:10.4.8+maria~bionic'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution

가져오려는 SQL 스크립트:

create database appdata;
use appdata;

CREATE TABLE `appdatadetails` (
  `Name` varchar(8) NOT NULL,
  `appIndex` int(11) NOT NULL,
  `connector` varchar(16) DEFAULT NULL,
  `intName` varchar(12) DEFAULT NULL,
  `intIndex` int(11) DEFAULT NULL,
  PRIMARY KEY (`Name`,`appIndex`)
) 

제가 무엇을 잘못하고 있는지 이해할 수 있도록 도와주세요.여러 블로그에 게재되어 있는 가능한 모든 해결책을 시도해 보았습니다.


업데이트:

여기에 이미지 설명 입력


최신 정보:

10.1에서 mariadb 도커 이미지를 가동할 수 있었습니다.하지만 볼륨을 첨부해도 여전히 문제가 있습니다.

도커 구성:

version: '3'

services:
  mysql:
    image: mariadb:10.1
    container_name: mariadb
    volumes:
      - container-volume:/var/lib/mysql
      - ./AppDatabase.sql:/docker-entrypoint-initdb.d/AppDatabase.sql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: appdata
    ports:
      - "3333:3306"

volumes:
  container-volume:

그리고 로그 오류 메시지인 "If I attach container-volume volume" (컨테이너 볼륨 볼륨을 첨부하면)

Creating mariadb ... done
Attaching to mariadb
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] mysqld (mysqld 10.1.41-MariaDB-1~bionic) starting as process 1 ...
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Using mutexes to ref count buffer pool pages
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: The InnoDB memory heap is disabled
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Compressed tables use zlib 1.2.11
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Using Linux native AIO
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Using SSE crc32 instructions
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Initializing buffer pool, size = 256.0M
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Completed initialization of buffer pool
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] InnoDB: Highest supported file format is Barracuda.
mariadb  | InnoDB: No valid checkpoint found.
mariadb  | InnoDB: A downgrade from MariaDB 10.2.2 or later is not supported.
mariadb  | InnoDB: If this error appears when you are creating an InnoDB database,
mariadb  | InnoDB: the problem may be that during an earlier attempt you managed
mariadb  | InnoDB: to create the InnoDB data files, but log file creation failed.
mariadb  | InnoDB: If that is the case, please refer to
mariadb  | InnoDB: http://dev.mysql.com/doc/refman/5.6/en/error-creating-innodb.html
mariadb  | 2019-09-25  6:56:26 140542855440384 [ERROR] Plugin 'InnoDB' init function returned error.
mariadb  | 2019-09-25  6:56:26 140542855440384 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
mariadb  | 2019-09-25  6:56:26 140542855440384 [Note] Plugin 'FEEDBACK' is disabled.
mariadb  | 2019-09-25  6:56:26 140542855440384 [ERROR] Unknown/unsupported storage engine: InnoDB
mariadb  | 2019-09-25  6:56:26 140542855440384 [ERROR] Aborting
mariadb  | 
mariadb exited with code 1

container-volume을 삭제하면 .sql 스크립트를 Import하여 정상적으로 실행됩니다.


작업 스크립트를 사용하여 업데이트됨:이전에 mariadb 10.4.8 또는 최신 버전을 사용하여 DB에 접속하여 외부 볼륨을 첨부하는 문제에 직면했습니다.

이제 (@Adii의 제안대로) 다운그레이드하여 시도했습니다.완벽하게 실행되므로 외부: true in volumes 서비스를 지정할 필요가 없습니다.

version: '3'

services:
  mysql:
    image: mariadb:10.1
    container_name: mariadb
    volumes:
      - ./dbvolume:/var/lib/mysql
      - ./AppDatabase.sql:/docker-entrypoint-initdb.d/AppDatabase.sql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: appdata
    ports:
      - "3333:3306"

새 컨테이너를 생성하더라도 새 사용자 및 키에 영향을 미칩니다.

마운트 위치를 삭제하면 이 위치에서 사용자 이름과 암호가 선택되므로 DB init 스크립트도 실행되지 않습니다.

    volumes:
      - dbvolume:/var/lib/mysql

또한 당신은 필요 없다.

create database appdata;

데이터베이스가 이미 작성되어 있는 경우:

      MYSQL_ROOT_PASSWORD: root123
      MYSQL_ROOT_USER: root
      MYSQL_DATABASE: appdata

이 순서입니다.

업데이트:

루트가 이미 정의된 대로 사용자 루트를 제거합니다.로 시험해 볼 수 있다.

version: '3.7'
services:

  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: appdata
    image: mariadb

또는 두 번째 사용자가 달라야 합니다.

version: '3.7'

services:

  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: appdata
      MYSQL_USER: test
      MYSQL_PASSWORD: root123
    image: mariadb

로 시험해 볼 수 있다.

docker exec -it container_name bash -c "mysql -u test -proot123"

또는

docker exec -it mysql bash -c "mysql -u root -proot123"

여기에 이미지 설명 입력 여기에 이미지 설명 입력

문제가 해결되지 않으면 DB 이미지를 삭제하고 새 이미지를 꺼냅니다.

이미지 태그 「」를 사용해 .10.1

container-volume을 삭제하면 .sql 스크립트를 Import하여 정상적으로 실행됩니다.

로케이션을 마운트하면 컨테이너가 이미 DB가 있다고 예상하기 때문에 init 스크립트는 실행되지 않습니다.또는 명명된 볼륨을 삭제하고 새 볼륨을 생성하려고 합니다.

따라서 위치를 마운트하고 MySQL 명령을 사용하여 DB를 Import한 후 마운트 위치를 다음에 사용합니다.

언급URL : https://stackoverflow.com/questions/58085851/access-denied-for-user-rootlocalhost-with-mariadb-10-4-8-docker-container-u