MySQL이 들어간 db 컨테이너가 일어나지 않는다! ~ Docker 이미지, docker-compose.yml를 다른 개발 환경에서 내용을 바꾸지 않고 사용하자고 ~
1. 하고 싶은 일
docker-compose up
명령으로 MySQL이 들어있는 db 컨테이너를 시작하고 싶습니다.
2. 과제
db 컨테이너에서 오류가 발생하고 일어나지 않습니다.
상황
db 컨테이너에서 오류가 발생하고 일어나지 않습니다.
상황
docker-compose up -d
명령을 실행하면(자), 일어나지 않았다 (그대로 사용되게 한다고 생각했는데…) portfolio $ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------
portfolio_app_1 docker-php-entrypoint apac ... Up 0.0.0.0:50080->80/tcp
portfolio_db_1 docker-entrypoint.sh mysqld Exit 1
앱 컨테이너가 일어나고 있습니다.
환경
참고: docker-compose.yml 내용
docker-compose.yml
version: "3"
services:
app:
build:
context: .
dockerfile: docker/app/Dockerfile
ports:
- "50080:80"
volumes:
- ./src:/var/www/html
depends_on:
- db
db:
image: mysql:5.5.62
ports:
- "53306:3306"
volumes:
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/mysql_data:/var/lib/mysql
env_file:
- ./docker/db/db-variables.env
로그를 확인하면 다음이 출력됩니다.
오류 로그
201123 21:20:26 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
201123 21:20:26 [Note] mysqld (mysqld 5.5.62) starting as process 1 ...
201123 21:20:26 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
201123 21:20:26 [Note] Plugin 'FEDERATED' is disabled.
201123 21:20:26 InnoDB: The InnoDB memory heap is disabled
201123 21:20:26 InnoDB: Mutexes and rw_locks use GCC atomic builtins
201123 21:20:26 InnoDB: Compressed tables use zlib 1.2.11
201123 21:20:26 InnoDB: Using Linux native AIO
201123 21:20:26 InnoDB: Initializing buffer pool, size = 128.0M
201123 21:20:26 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile1 is of different size 0 0 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
201123 21:20:26 [ERROR] Plugin 'InnoDB' init function returned error.
201123 21:20:26 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
201123 21:20:26 [ERROR] Unknown/unsupported storage engine: InnoDB
201123 21:20:26 [ERROR] Aborting
201123 21:20:26 [Note] mysqld: Shutdown complete
「로그 파일 ./ib_logfile1 은 .cnf 파일로 지정된 사이즈 0 5242880 바이트와는 다른 0 0 바이트」인 것이, 문제답게, InnoDB와 어쨌든이 일어나지 않고, MySQL도 셧다운 하는 모습.
처음에는 로컬 디렉토리의 ib_logfile1의 크기 설정 등으로 정면 승부하여 시간을 투하했습니다만, 초학자에게는 너무 강해서, Docker의 기초를 넉넉히 학습해, 아래와 같은 대책에 드디어 도착했습니다 ...
3. 최종적으로 효과가 있던 대책
로컬 디렉터리./docker/db/mysql_data
에 동기화하는 구성에서 Docker 볼륨을 만들고 여기에 저장하는 구성으로 변경했습니다.
# MySQLの以前のデータを削除する
rm -rf docker/db/mysql_data
# Docker コンテナの停止・削除
docker-compose down
# Docker の不要なイメージ、コンテナ、ネットワーク、ボリュームを削除する
docker system prune
./docker/db/mysql_data
)에 동기화하지 않으려면, docker-compose.yml
아래의 행을 삭제하십시오.
db:
volumes:
- ./docker/db/mysql_data:/var/lib/mysql # ← この行を削除
docker-compose.yml
에 다음 행을 추가하십시오 (mysql_data라는 볼륨 생성)
db:
image: mysql:5.5.62
ports:
- "53306:3306"
volumes:
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- mysql_data:/var/lib/mysql # ← この行を追記
env_file:
- ./docker/db/db-variables.env
volumes: # ← この行を追記
mysql_data: # ← この行を追記
# Docker イメージのビルド
docker-compose build
# Docker コンテナの起動
docker-compose up -d
# コンテナの起動状態を確認する
docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
portfolio_app_1 docker-php-entrypoint apac ... Up 0.0.0.0:50080->80/tcp
portfolio_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:53306->3306/tcp
일어났다!
MySQL에서 테이블을 만들고 컨테이너를 일단 삭제해도 데이터는 남아있었습니다!
Reference
이 문제에 관하여(MySQL이 들어간 db 컨테이너가 일어나지 않는다! ~ Docker 이미지, docker-compose.yml를 다른 개발 환경에서 내용을 바꾸지 않고 사용하자고 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryamate/items/8853c6b7ac7379d0c1a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)