

docker-composeを使ってコンテナオーケストレーションを学んでいます。

以下のフォルダ構成で、appコンテナから、dbコンテナのmariadbにアクセスしたいのですが、エラーが出てうまくいきません。

## ディレクトリ構成

[code]

    .
    ├── app
    │   └── Dockerfile
    ├── db
    │   └── Dockerfile
    └── docker-compose.yml
    
[/code]

## コード

app/Dockerfile

[code]

    FROM debian:buster
    
    RUN set -x \
        && apt-get update \
        && apt-get install --no-install-recommends --no-install-suggests -y \
            mariadb-client \
            vim
    
    CMD [ "tail", "-f" ]
    
[/code]

db/Dockerfile

[code]

    FROM debian:buster
    
    RUN set -x \
        && apt-get update \
        && apt-get install --no-install-recommends --no-install-suggests -y \
            mariadb-server \
            mariadb-client \
            vim
    
    CMD service mysql start \
        && tail -f /dev/null
    
[/code]

docker-compose.yml

[code]

    version: "3.9"
    
    services:
      app:
        build: ./app
        networks:
          - frontend
    
      db:
        build: ./db
        expose:
          - 3306
        networks:
          - frontend
    
    networks:
      frontend:
        driver: bridge
    
    volumes:
      db_data: {}
    
[/code]

## 実行コマンド

appコンテナに入って、以下のコマンドを実行しましたが、エラーが出ます。

[code]

    root@0e0ad0889639:/# mysql -h db -uroot
    ERROR 2002 (HY000): Can't connect to MySQL server on 'db' (115)
    
    ## 接続は出来ているようです。
    root@0e0ad0889639:/# ping db
    PING db (192.168.128.3) 56(84) bytes of data.
    64 bytes from test_db_1.test_frontend (192.168.128.3): icmp_seq=1 ttl=64 time=0.104 ms
    64 bytes from test_db_1.test_frontend (192.168.128.3): icmp_seq=2 ttl=64 time=0.142 ms
    
[/code]

コンテナが接続できない理由を教えて頂きたいです。よろしくお願いします。

## 試したこと

### dbコンテナ側

dbコンテナは初期設定等は行っていないです。  
dbのコンテナでmariadbを立ち上げる事はできます。

[code]

    root@9d3b519e464f:/# service --status-all
     [ ? ]  hwclock.sh
     [ + ]  mysql
     [ - ]  rsync
    
[/code]

[code]

    MariaDB [mysql]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.001 sec)
    
    MariaDB [mysql]> SELECT User,Host FROM mysql.user;
    +------+-----------+
    | User | Host      |
    +------+-----------+
    | root | localhost |
    +------+-----------+
    
[/code]

### appのコンテナ側

コンテナ名を返るとエラーが変わるので、通信自体は出来ていそうです。

[code]

    root@69ccb34f8a30:/# mariadb -u root -h db
    ERROR 2002 (HY000): Can't connect to MySQL server on 'db' (115)
    
    root@69ccb34f8a30:/# mariadb -u root -h aa
    ERROR 2005 (HY000): Unknown MySQL server host 'aa' (-2)
    
[/code]

## 環境

[code]

    ❯ docker -v        
    Docker version 20.10.12, build e91ed57
    ❯ sw_vers
    ProductName:    macOS
    ProductVersion: 12.3
    BuildVersion:   21E230
    
[/code]


CC BY-SA 4.0
2022-03-22T03:55:05.637
87958
2022-03-22T08:11:27.637
2022-03-22T07:11:08.877
44648
44648
question
mysql docker docker-compose mariadb
他のDockerコンテナからコンテナ内のMySQL/MariaDBに接続したい


2つの設定を変えることで解決しました。

① mysql内部での受け入れホストの設定

[code]

    USE mysql;
    GRANT ALL ON *.* TO 'root'@'%' identified by 'pass' WITH GRANT OPTION ;
    GRANT ALL ON *.* TO 'root'@'localhost' identified by 'pass' WITH GRANT OPTION ;
    FLUSH PRIVILEGES ;
    
[/code]

② mysqlのconfigファイルの変更

etc/mysql/mariadb.conf.d/50-server.cnf  
に以下を追記です。  
bind-address = app


CC BY-SA 4.0
2022-03-22T08:11:27.637
87962
2022-03-22T08:11:27.637
44648
87958
answer