다음 문서를 참고하면 MySQL 컨테이너를 설치하고 실행하는 방법과 그 과정에서 발생하는 문제점들을 해결하는 방법을 확인할 수 있다.
MySQL_container에_접속이_안_되는_문제_해결하기
docker 명령만으로 MySQL 컨테이너를 만들면 명령행 아규먼트나 옵션을 많이 지정해야 하므로 번거롭다.
docker-compose.yml 파일을 만들고 docker compose 명령으로 실행한 다음, 접속하는 방법을 제시해본다.
version: "3"
services:
db:
image: mysql:8.0.32
environment:
MYSQL_HOST: localhost
MYSQL_ROOT_PASSWORD: myrootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: myuser
MYSQL_PASSWORD: myuserpassword
TZ: Asia/Seoul
restart: unless-stopped
volumes:
- ./db/conf.d:/etc/mysql/conf.d
- ./db/data:/var/lib/mysql
- ./db/initdb.d:/docker-entrypoint-initdb.d
ports:
- 13306:3306
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
networks:
- mynet
networks:
mynet:
driver: host
root 패스워드와 데이터베이스 이름, 사용자 이름, 사용자 패스워드를 지정해두면 권한 설정까지 잘 된다.
주의사항:
컨테이너를 생성하고 나면 볼륨에 write되기 때문에, mysql 클라이언트로 접속해서 변경하든가 아니면 볼륨을 삭제하고 다시 생성해야 한다.
주의해서 살펴봐야 할 설정은, port 매핑과 network 모드이다.
설정이 끝났으면 다음과 같이 실행해본다. 우선은 어떤 에러가 발생하는지 확인하기 위해 daemon mode 옵션인 -d 옵션을 사용하지 않고 올려 본다.
docker compose up
mysql_fm-db-1 | 2023-03-13T01:39:21.539916Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.32' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
이와 비슷한 메시지가 화면에 출력된다면 정상적으로 실행된 것이다. 문제가 있다면 "[Error]" 메시지가 출력될 것이다.
이 상태에서 다른 shell을 실행하여 MySQL 클라이언트로 접속해보자. "Enter password:" 프롬프트가 뜨면 패스워드를 입력한다.
mysql -h 127.0.0.1 -P 13301 -u myuser mydatabase -p
주의사항:
-h 옵션의 아규먼트로 localhost를 사용하면 Unix domain socket(파일)을 이용해서 접속하기 때문에 127.0.0.1 IP 주소를 사용해야 한다.
접속 테스트가 정상적으로 완료되었으므로 이제 daemon mode로 재실행하면 된다. Ctrl-C로 docker compose 명령을 중지시키고 다음 명령으로 재실행한다.
docker compose up -d