質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

2169閲覧

Dockerでコンテナ間のmysql疎通ができません。

cayce_danguri

総合スコア10

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/06/08 01:29

dockerでmysqlをコンテナ間で疎通できません。

dockerで作成したappコンテナ内のlaravelフォルダでphp artisan migrateを実行すると下記のようなエラーが発生します。

root@4177ab34c56f:/var/www/html/test_app# php artisan migrate Illuminate\Database\QueryException SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = test_app and table_name = migrations and table_type = 'BASE TABLE') at vendor/laravel/framework/src/Illuminate/Database/Connection.php:671 667| // If an exception occurs when attempting to run a query, we'll format the error 668| // message to include the bindings with SQL, which will make this exception a 669| // lot more helpful to the developer instead of just the database's errors. 670| catch (Exception $e) { > 671| throw new QueryException( 672| $query, $this->prepareBindings($bindings), $e 673| ); 674| } 675| +34 vendor frames 35 artisan:37 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

最初はlarvel側の.envやconfig/database.phpの設定の問題かと思案しましたが、appコンテナ側からmysqlコンテナに接続できないのでそもぞもdockerの接続方法に問題があるのかと思います。ちなみにmysqlコンテナで

mysql -u test -p

を実行すると問題なくdbにアクセスできます。
dockerに詳しかた、ぜひご教示ください。ヒントだけでも構いません。

ファイル構造

test_app - docker-compose.yml - docker/ - php/ - dockerfile - web/ - default.conf - publics/

docker-compose.yml

version: '3' services: web: image: nginx:1.15.6 ports: - '8085:80' depends_on: - app volumes: - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf - ./publics/:/var/www/html networks: - app-net app: build: ./docker/php volumes: - ./publics/:/var/www/html depends_on: - mysql networks: - app-net mysql: container_name: mysql image: mysql:5.7 environment: MYSQL_DATABASE: test_app MYSQL_USER: test MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: password ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql networks: - app-net volumes: mysql-data: networks: app-net: driver: bridge

./docker/php/dockerfile

FROM php:7.2-fpm RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer RUN apt-get update \ && apt-get install -y \ git \ zip \ unzip \ vim RUN apt-get update \ && apt-get install -y libpq-dev \ && docker-php-ext-install pdo_mysql pdo_pgsql WORKDIR /var/www/html

./docker/web/default.conf

server { listen 80; root /var/www/html/test_app/public; index index.php index.html index.htm; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }

もろもろの環境

Docker version 19.03.8
docker-compose version 1.25.5
Laravel Framework 7.14.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

次の内容を確認しましょう:

app コンテナ側から mysql コンテナに接続できることの証明

app コンテナに MySQL client をインストールして PHP を介さずに接続してみます:

docker-compose.yml

yaml

1version: '3' 2services: 3 # ↓ 問題を単純化するためコメントアウトします 4 # web: 5 # image: nginx:1.15.6 6 # ports: 7 # - '8085:80' 8 # depends_on: 9 # - app 10 # volumes: 11 # - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf 12 # - ./publics/:/var/www/html 13 # networks: 14 # - app-net 15 16 app: 17 build: ./docker/php 18 # ↓ docker-compose run でアタッチするため追加しました 19 command: bash 20 depends_on: 21 - mysql 22 networks: 23 - app-net 24 # ↓ docker-compose run でアタッチするため追加しました 25 tty: 'true' 26 27 mysql: 28 container_name: mysql 29 image: mysql:5.7 30 environment: 31 MYSQL_DATABASE: test_app 32 MYSQL_USER: test 33 MYSQL_PASSWORD: password 34 MYSQL_ROOT_PASSWORD: password 35 ports: 36 - "3306:3306" 37 volumes: 38 - mysql-data:/var/lib/mysql 39 networks: 40 - app-net 41 42volumes: 43 mysql-data: 44 45networks: 46 app-net: 47 driver: bridge

./docker/php/dockerfile

dockerfile

1FROM php:7.2-fpm 2 3RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer 4 5RUN apt-get update \ 6&& apt-get install -y \ 7git \ 8zip \ 9unzip \ 10vim 11 12RUN apt-get update \ 13 && apt-get install -y libpq-dev \ 14 && docker-php-ext-install pdo_mysql pdo_pgsql 15 16WORKDIR /var/www/html 17 18# ↓ MySQL client のインストール 19RUN apt-get update 20RUN apt install wget 21RUN wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb 22ENV DEBIAN_FRONTEND=noninteractive 23RUN apt install -y ./mysql-apt-config_0.8.13-1_all.deb 24RUN apt-get update 25RUN apt install -y mysql-client

console

1FROM php:7.2-fpm 2 3RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer 4 5RUN apt-get update \ 6&& apt-get install -y \ 7git \ 8zip \ 9unzip \ 10vim 11 12RUN apt-get update \ 13 && apt-get install -y libpq-dev \ 14 && docker-php-ext-install pdo_mysql pdo_pgsql 15 16WORKDIR /var/www/html 17 18# MySQL client のインストール 19RUN apt-get update 20RUN apt install wget 21RUN wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb 22ENV DEBIAN_FRONTEND=noninteractive 23RUN apt install -y ./mysql-apt-config_0.8.13-1_all.deb 24RUN apt-get update 25RUN apt install -y mysql-client

console

1$ docker-compose run --rm app 2Creating network "test-docker-mysql_app-net" with driver "bridge" 3Creating mysql ... done 4root@885f1acc4c85:/var/www/html# mysql -h mysql -u root -p 5Enter password: 6Welcome to the MySQL monitor. Commands end with ; or \g. 7Your MySQL connection id is 2 8Server version: 5.7.29 MySQL Community Server (GPL) 9 10Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. 11 12Oracle is a registered trademark of Oracle Corporation and/or its 13affiliates. Other names may be trademarks of their respective 14owners. 15 16Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 17 18mysql> select @@hostname; 19+--------------+ 20| @@hostname | 21+--------------+ 22| 748a0d33bea4 | 23+--------------+ 241 row in set (0.00 sec)

別のターミナルでコンテナの ID を調べます:

console

1$ docker ps 2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3885f1acc4c85 test-docker-mysql_app "docker-php-entrypoi…" About a minute ago Up About a minute 9000/tcp test-docker-mysql_app_run_fccf55be9767 4748a0d33bea4 mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp mysql 56

上記の結果より、app コンテナ側から mysql コンテナに接続できることがわかります

投稿2020/06/27 18:15

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問