🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
docker-compose

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Docker

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

Q&A

解決済

1回答

2607閲覧

dockerでLaravel→MySQLに接続できない場合の調べ方について

Hirakin3

総合スコア33

docker-compose

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Docker

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

0グッド

1クリップ

投稿2019/10/04 13:05

編集2019/10/07 13:06

前提・実現したいこと

LaravelからMySQLへの接続できず詰まっています。
Windows10+VirtualBox+Vagrantで、dockerを使っています。

いくつか気になる点を修正してみましたが、進まないためアドバイスを頂ければ幸いです。

〇〇のコマンド使ってみた??みたいなご指摘でも頂ければ助かります。

Dockerの構成はよくあるこのような形です。

laravel //Laravelのソース etc └───db    //MySQLファイルを設置 └───nginx Dockerfile  //PHPについて記載 docker-compose.yml

発生している問題・エラーメッセージ

エラーをみる限り、MySQLにアクセスできていません。

PDOException (2002) SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

該当のソースコード

Vagrantfile

1 2Vagrant.configure("2") do |config| 3 # Virtual OS 4 config.vm.box = "centos/7" 5 6 # PrivateIP 7 config.vm.network "private_network", ip: "192.168.33.10" 8 9 # Synced Folder 10 config.vm.synced_folder "./docker", "/home/vagrant/docker", type:"virtualbox", mount_options: ['dmode=777','fmode=777'] 11 12 # Provisioning Script 13 config.vm.provision :shell, :path => "provision.sh" 14 15 config.vm.provider "virtualbox" do |vm| 16 # メモリを1024MBに設定 17 vm.memory = 2048 18 end 19 20 if Vagrant.has_plugin?("vagrant-vbguest") 21 config.vbguest.auto_update = false 22 end 23 24end 25

Dockkerfile

1#FROM php:7.2-fpm-alpine 2 3FROM php:7.2-fpm 4 5RUN docker-php-ext-install pdo_mysql 6 7RUN apt-get update \ 8 && apt-get install -y \ 9 zlib1g-dev \ 10 libfreetype6-dev \ 11 libjpeg62-turbo-dev \ 12 libpng-dev \ 13 && docker-php-ext-install zip \ 14 && yes "" | pecl install xdebug \ 15 && docker-php-ext-enable xdebug \ 16 && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 17 && docker-php-ext-install -j$(nproc) gd 18 19 20RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 21RUN php -r "if (hash_file('SHA384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 22RUN php composer-setup.php 23RUN php -r "unlink('composer-setup.php');" 24RUN mv composer.phar /usr/local/bin/composer 25 26ENV COMPOSER_ALLOW_SUPERUSER 1 27ENV COMPOSER_HOME /composer 28ENV PATH $PATH:/composer/vendor/bin 29 30RUN composer global require "laravel/installer" 31 32RUN apt-get update \ 33 && apt-get install -y libpq-dev \ 34 && docker-php-ext-install pdo_mysql pdo_pgsql 35 36RUN apt-get update \ 37 && apt-get install -my wget gnupg 38 39RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - 40RUN apt-get update 41RUN apt-get install -y nodejs 42 43WORKDIR /laravel 44

Laravel 内の.env

Laravel

1APP_NAME=Laravel 2APP_ENV=local 3APP_KEY=base64:e3naj3FGSpf+sujkSeDwXr2A3KNUys85tOOwHo0/kRk= 4APP_DEBUG=true 5APP_URL=http://local.laravel 6 7LOG_CHANNEL=stack 8 9DB_CONNECTION=mysql 10DB_HOST=127.0.0.1 11DB_PORT=3306 12DB_DATABASE=blog 13DB_USERNAME=root 14DB_PASSWORD= 15 16BROADCAST_DRIVER=log 17CACHE_DRIVER=file 18SESSION_DRIVER=file 19SESSION_LIFETIME=120 20QUEUE_DRIVER=sync 21 22REDIS_HOST=127.0.0.1 23REDIS_PASSWORD=null 24REDIS_PORT=6379 25 26MAIL_DRIVER=smtp 27MAIL_HOST=smtp.mailtrap.io 28MAIL_PORT=2525 29MAIL_USERNAME=null 30MAIL_PASSWORD=null 31MAIL_ENCRYPTION=null 32 33PUSHER_APP_ID= 34PUSHER_APP_KEY= 35PUSHER_APP_SECRET= 36PUSHER_APP_CLUSTER=mt1 37 38MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 39MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 40

docker-compose.yml

dockercompose

1version: "2" 2 3services: 4 nginx: 5 image: nginx:alpine 6 volumes: 7 - ./etc/nginx/conf.d/:/etc/nginx/conf.d/ 8 - ./laravel/public:/var/www/laravel/public 9 ports: 10 - 8080:80 11 links: 12 - phpfpm 13 depends_on: 14 - phpfpm 15 phpfpm: 16 build: 17 context: . 18 dockerfile: ./Dockerfile 19 volumes: 20 - ./laravel:/var/www/laravel 21 links: 22 - mysql 23 depends_on: 24 - mysql 25 environment: 26 - DB_HOST=mysql 27 - DB_DATABASE=blog 28 - DB_USERNAME=root 29 - DB_PASSWORD=root 30 mysql: 31 image: mysql:5.7 32 volumes: 33 # 初期データを投入するSQLが格納されているdir 34 - ./etc/db/mysql_init:/docker-entrypoint-initdb.d 35 # 永続化するときにマウントするdir 36 - ./etc/db/mysql_data:/var/lib/mysql 37 restart: always 38 environment: 39 - DB_HOST=mysql 40 - DB_DATABASE=blog 41 - DB_USERNAME=root 42 - DB_PASSWORD=root 43 ports: 44 - 3306:3306 45 46 phpmyadmin: 47 image: phpmyadmin/phpmyadmin 48 depends_on: 49 - mysql 50 environment: 51 - PMA_ARBITRARY=1 52 - PMA_HOST=mysql 53 - PMA_USER=root 54 - PMA_PASSWORD=root 55 links: 56 - mysql 57 ports: 58 - 3000:80 59 volumes: 60 - /sessions

hosts

1#localhost 2127.0.0.1 localhost 3 4#docker on vagrant 5192.168.33.10 local.laravel 6

試したこと

思いつく範囲で以下を行いましたが、改善できていません。
・問題の切り分け
・記述ミス
・hostsファイルの変更
・.envファイルのIP変更

NginXでのLaravelの起動は確認できています。

補足情報(FW/ツールのバージョンなど)

・Windows10 HomeEdition
・CentOS7/Bento
・Vagrant2.2.4 
・Laravel5.5
・MySQL5.7

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

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

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

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

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

xenbeat

2019/10/06 11:50

今回はLaravelの設定も関係しているので「Laravel」をタグに追加されると良いですよ。
guest

回答1

0

ベストアンサー

dockerでLaravel→MySQLに接続できない場合の調べ方について

LaravelからMySQLへの接続できず詰まっています。

Windows10+VirtualBox+Vagrantで、dockerを使っています。
いくつか気になる点を修正してみましたが、進まないためアドバイスを頂ければ幸いです。
〇〇のコマンド使ってみた??みたいなご指摘でも頂ければ助かります。

Vagrant上でDockerを動かしているという環境ですね。
でしたら気になるのは質問文の「docker-compose.yml」と「Laravel 内の.env」にあるMySQLの設定です。
同環境を用意するのが難しいため未検証ですが、次の手順を試してみてください。

1.ホストのデータボリューム(./etc/db/mysql_data)を削除
2.以下「docker-compose.yml」の一部を修正

# docker-compose.yml version: "2" services: ︙(省略) mysql: ︙(省略) environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=blog - MYSQL_USER=teratail - MYSQL_PASSWORD=teratail ︙(省略)

3.以下「Laravel 内の.env」の一部を修正

# env ︙(省略) DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=root ︙(省略)

4.docker-compose build --no-cache mysqlを実行
5.docker-compose up -dを実行

投稿2019/10/06 11:44

xenbeat

総合スコア4258

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

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

Hirakin3

2019/10/07 13:05

ありがとうございます。 ご指摘いただいた内容と改めて見直し行い解決できました。 原因は ・Laravel の.envファイルで、DB_HOST=mysql にしていなかった。  docker-compose.yml のエイリアスで指定した「mysql」をDB_HOSTにする。 その後、変更が反映されていなかったので以下を実行 ``` docker-compose build --no-cache mysql docker-restart ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問