内容
``` docker-compose exec db mysql -u root -p ``` コマンドでmysqlに接続ができない実行環境
・windows10 ・docker ・mysql Ver 15.1 Distrib 10.5.12-MariaDB ・debian11 ・Python 3.8.2エラー内容
``` ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2) ```各種ディレクトリ構成、内容
``` . ├── Dockerfile ├── docker-compose.yml ├── mysql │ ├── Dockerfile │ ├── my.cnf │ └── sqls │ │ └── initialize.sql │ └──mysql-data ├── src │ ├── __init__.py │ ├── sample.py │ └── Dockerfile ├── docker-compose.yml ├── README.md └── requirements.txt ```docker-compose.yml
version: '3'
services:
#database container
db:
image: mysql:5.7
ports:
- 3306:3306
expose:
- '3306'
restart: always
container_name: python-db
build: ./mysql/
volumes:
- ./mysql/mysql_data:/var/lib/mysql
- ./mysql/sqls:/docker-entrypoint-initdb.d
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
#userパスワード
- MYSQL_DATABASE=test_database
- MYSQL_USER=user
- MYSQL_PASSWORD=docker
- TZ=Asia/Tokyo
#rootパスワード
- MYSQL_ROOT_PASSWORD=root
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_RANDOM_ROOT_PASSWORD=no
stdin_open: true
#application container
python3:
ports:
- "8000:80"
container_name: python3
build:
context: ./src/
links:
- db
stdin_open: true
##データベース
FROM mysql:5.7
# EXPOSE 3306
RUN touch /var/log/mysql/mysqld.log
RUN touch /run/mysqld/mysql.sock
ADD ./mysql/my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/my.cnf
CMD ["mysqld"]
##アプリケーション本体
FROM python:3.6
ARG project_dir= /src
WORKDIR $project_dir
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN python -m pip install jupyterlab
my.conf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8mb4
user = docker
password = docker
試したこと
・```docker exec -it python-db sh```でコンテナに入り``` mysql_config --socket ```で```mysqld.sock```があることは確認済み・ ps ax | grep mysql
でプロセスを確認してみた所 19608 pts/1 S+ 0:00 grep mysql
とありおそらくmysqlがうまく起動?できてないみたいです。
root@コンテナid:/# ls -l /run/
合計 8
drwxrwxrwt 2 root root 4096 12月 20 09:00 lock
drwxrwxrwx 2 root root 4096 2月 16 18:32 mysqld
-rw-rw-r-- 1 root utmp 0 12月 20 09:00 utmp
root@コンテナid:/# ls -l /run/mysqld/
合計 0
-rwxrwxrwx 1 root root 0 2月 16 18:32 mysqld.sock
root@コンテナid:/# ls -l /run/mysqld/mysqld.sock
-rwxrwxrwx 1 root root 0 2月 16 18:32 /run/mysqld/mysqld.sock
試行錯誤
参考サイト 参考サイト 参考サイト 参考サイト このようなサイトを参考にファイル内の記述を変更してみたりしてみましたが、効果なしでした。解決策
docker-compose.ymlファイル内の記述内容を下記のように書き換えました。docker-compose.yml
version: '3.3'
services:
python3:
ports:
- 8000:80
build: ./src/
links:
- db
stdin_open: true
db:
image: mysql:8.0
ports:
- 3306:3306
restart: always
volumes:
- ./mysql/mysql_data:/var/lib/mysql
- ./mysql/sqls:/docker-entrypoint-initdb.d
- ./log/mysql:/var/log/mysql
environment:
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: pass
MYSQL_ROOT_PASSWORD: password
eTZ: Asia/Tokyo
stdin_open: true
・変更内容はbuildディレクトリをmysqlとアプリケーションで分けていましたが、それをアプリケーション側にまとめました。
・mysql dockerイメージをmysql8.0
に変更しdocker-compose up -d --build
してdocker exec -it <コンテナ名> bash
でコンテナに入り、mysql -u root -p
とすると
root@<container id>:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
無事にログインできました、何とか期待通りの動作をしてくれたのはうれしいですが、ファイル編集前の段階でかなり時間を使ってしまいました。
しかしなぜ前の環境ではうまくmysqlに接続できなかったのか今一分かっておりません・・・