데이터 볼륨을 사용하는 MariaDB Docker 컨테이너 - 오류 2002, 소켓을 통해 연결할 수 없음
도커 컨테이너에 MariaDB를 설치했는데 잘 작동했습니다.데이터베이스를 컨테이너 라이프사이클에서 분리하기 위해 데이터 디렉토리를 외부 볼륨으로 이동하고자 했습니다.여기에 나와 있는 지침을 따랐지만 이제 엔진에 연결하려고 하면 다음과 같은 메시지가 표시됩니다.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/www/databases/mysqld/mysqld.sock' (2)
"/var/www/"는 외부 볼륨의 마운트 지점입니다.저는 그것이 권한인지 궁금해서 MariaDB 컨테이너에 있는 데이터베이스 폴더의 소유자를 MySQL 계정의 이름인 'myqsl'로 설정했습니다.
drwxr-xr-x 3 mysql mysql 4096 Jan 15 16:38 databases
drwxr-xr-x 3 1000 1000 4096 Jan 15 13:59 files
drwxr-xr-x 2 1000 1000 4096 Jan 15 15:20 html
drwxr-xr-x 3 1000 1000 4096 Jan 15 13:59 src
NB: 호스트 파일 시스템에서 소유자는 999:docker로 나열됩니다.이것이 중요합니까?
drwxr-xr-x 3 999 docker 4096 Jan 15 16:38 databases
볼륨에 데이터베이스를 저장하려면 무엇이 부족합니까?
다음은 내 /etc/MySQL/my.cnf 파일(다양한 폴더를 정의하는 비트)의 일부 덤프입니다.
[client]
port = 3306
#socket = /var/run/mysqld/mysqld.sock
socket = /var/www/databases/mysqld/mysqld.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
#socket = /var/run/mysqld/mysqld.sock
socket = /var/www/databases/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
#user = mysql
pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
socket = /var/www/databases/mysqld/mysqld.sock
port = 3306
basedir = /usr
#datadir = /var/lib/mysql
datadir = /var/www/databases
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
도커-docker.yml:
여기 제 yml 파일의 내용이 있습니다.제가 이 물건은 초보자라 구멍투성이일 겁니다.친절하게 대해주세요 :)
version: '3.2'
volumes:
mwApache2Data:
external: true
webContent:
external: true
networks:
frontend:
backend:
services:
php:
build: './php7.1/'
image: php7.1.26-fpm:1.0
restart: always
container_name: php7.1.26-fpm
networks:
- backend
# volumes:
# - mwApache2Data:/app
web:
build: ./apache2/
image: apache2:1.0
restart: always
container_name: AOW_apache2Server
depends_on:
- php
- mariadb
networks:
- frontend
- backend
expose:
- "80"
- "81"
- "443"
- "8083"
ports:
- "80:80"
- "81:81"
- "443:443"
- "8083:8083"
volumes:
- mwApache2Data:/app
- webContent:/var/www
mariadb:
build: ./mariaDB/
image: mariadb_10.4.0
container_name: mariaDB_10.4.0
restart: always
networks:
- backend
environment:
- MYSQL_DATABASE=lg_wiki_db
- MYSQL_USER=wikiuser
- MYSQL_PASSWORD=****
- MYSQL_ROOT_PASSWORD=****
volumes:
- webContent:/var/www
mediawiki:
image: mediawiki:1.31.1
container_name: mediawiki_1.31.1
restart: always
depends_on:
- web
networks:
- backend
# ports:
# - 8080:80
links:
- mariadb
volumes:
- webContent:/var/www/
# After initial setup, download LocalSettings.php to the same directory as
# this yaml and uncomment the following line and use compose to restart
# the mediawiki service
# - ./LocalSettings.php:/var/www/html/LocalSettings.php
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: always
depends_on:
- web
expose:
- 80
networks:
- frontend
- backend
ports:
- 8080:80
links:
- mariadb
여러분의 조언에 감사드립니다.결국 저는 이것에 대한 내부 지지를 찾았습니다.
이 방법은 기본 데이터베이스 폴더를 외부 볼륨으로 마운트하는 것이었습니다.
volumes:
- databases:/var/lib/mysql
이것은 대부분 오프타임에 효과가 있었습니다.유일한 경고는 내 작성 파일이 MySQL 루트 자격 증명을 정의했다는 것입니다.마운트를 고정할 때 이 암호를 덮어썼기 때문에 컨테이너를 처음 스핀업할 때 루트 암호를 수동으로 재설정해야 했습니다.이제 데이터 디렉토리가 볼륨 외부에 있으므로 새 이미지가 동일한 루트 암호를 선택해야 하므로 이 문제는 해결되어야 합니다.이 변경 사항을 설정 파일로 스크립팅할 수 있어야 합니다.
도커 구성에서 볼륨 /var/www/데이터베이스를 마운트해 보았습니까?당신이 링크한 예를 따라, 저는 다음을 제안해야 합니다.
...
mysql:
image: mysql:5.6.40
networks:
- backend
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
volumes:
- ./your_persistent_db_data_dir:/var/www/databases
고려해야 할 또 다른 사항은 네트워크 문제입니다.그런 경우에는 모든 도커 네트워크를 공유해야 합니다.network_mode: host그들 사이에서 소통하고자 하는 모든 서비스에.여기.'
마지막으로, 도움이 되지 않는 경우 호스트에 MariaDB를 설치하고 파일 /var/www/databases/mysqld/mysqld.sock을 볼륨으로 마운트하려고 합니다.이것은 권장되는 것이 아니며, 매우 우아하지 않으며, 더 나아가 목표는 외부의 영구 데이터가 있는 도커에 DB를 두는 것입니다.
언급URL : https://stackoverflow.com/questions/54215309/mariadb-docker-container-using-data-volume-error-2002-cant-connect-through-s
'codememo' 카테고리의 다른 글
| 반복을 사용하지 않고 배열 반전 (0) | 2023.07.22 |
|---|---|
| 장고에서 언제 새로운 앱(시작 앱 포함)을 만들 수 있습니까? (0) | 2023.07.22 |
| 데이터베이스 열에서 행 생성 (0) | 2023.07.22 |
| Oracle SQL에서 GROUP BY 절에 열 별칭을 사용할 수 없는 이유는 무엇입니까? (0) | 2023.07.17 |
| Git: 모든 커밋을 제거하기 위해 원격 Git 저장소를 재설정하는 방법은 무엇입니까? (0) | 2023.07.17 |