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

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

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

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

4659閲覧

AWS ECS Fargateにおいて、タスク内でコンテナ間通信ができない

uchida_yuma

総合スコア44

Docker

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/10/10 01:47

編集2021/10/11 03:10

前提・実現したいこと

ECS Fargate上でシンプルなLAMPアプリを動かしたい

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

PHP(Laravel)コンテナからMariadbコンテナへアクセスができない

(ECS Execでphp artisan migrateでも同じエラー)

こちらの記事では、同じタスク内においてはlocalhostで通信ができるようですが、アクセスができなく困っております。

Linking Container in AWS Fargate

タスクのIPに直接アクセス

SQLSTATE[HY000] [2002] No such file or directory (SQL: ・・・

該当のインフラ定義

Laravel・MariaDB両者のコンテナはビルドしたDockerfileをECRで管理

*現状、ツッコミどころが色々ありますが、まずは動かすことを目的にしているので、余計な部分もあります。

Laravel-Dockerfile

FROM php:7.4.24-apache #install all the system dependencies and enable PHP modules RUN apt-get update \ && apt-get install -y zlib1g-dev \ && apt-get install -y zip unzip \ && apt-get -y install libzip-dev libonig-dev \ && docker-php-ext-install pdo_mysql mysqli zip \ && docker-php-ext-enable mysqli \ && a2enmod rewrite # タイムゾーン設定 ENV TZ=Asia/Tokyo # cronのインストール RUN apt-get update && apt-get install -y \ busybox-static \ && apt-get clean #install composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin #set our application folder as an environment variable ENV APP_HOME /var/www/html #change uid and gid of apache to docker user uid/gid RUN usermod -u 1000 www-data && groupmod -g 1000 www-data COPY ./php/vhost.conf /etc/apache2/conf-enabled/vhost.conf # enable apache module rewrite RUN a2enmod rewrite #copy source files and run composer COPY . $APP_HOME RUN mkdir bootstrap/sessions #RUN mkdir storage/framework/sessions && \ # mkdir storage/framework/views && \ # mkdir storage/framework/cache # install all PHP dependencies RUN composer install --no-dev --no-interaction #change ownership of our applications RUN chown -R www-data:www-data $APP_HOME # chmod -R 0777 bootstrap && \ # chmod -R 0777 storage RUN mv .env.production .env EXPOSE 80

MariaDB-Dockerfile

FROM mariadb:10.4 ENV MYSQL_USER=dbuser \ MYSQL_PASSWORD=**** \ MYSQL_DATABASE=simplememo \ MYSQL_ROOT_PASSWORD=**** COPY ./init.sql /docker-entrypoint-initdb.d EXPOSE 3306

タスク定義(ECS)

json

1{ 2 "ipcMode": null, 3 "executionRoleArn": "arn:aws:iam::995962138333:role/ecsTaskExecusionRole", 4 "containerDefinitions": [ 5 { 6 "dnsSearchDomains": null, 7 "environmentFiles": null, 8 "logConfiguration": { 9 "logDriver": "awslogs", 10 "secretOptions": null, 11 "options": { 12 "awslogs-group": "/ecs/fargate-laravel", 13 "awslogs-region": "ap-northeast-1", 14 "awslogs-stream-prefix": "ecs" 15 } 16 }, 17 "entryPoint": null, 18 "portMappings": [ 19 { 20 "hostPort": 80, 21 "protocol": "tcp", 22 "containerPort": 80 23 } 24 ], 25 "command": null, 26 "linuxParameters": null, 27 "cpu": 0, 28 "environment": [ 29 { 30 "name": "DB_DATABASE", 31 "value": "simplememo" 32 }, 33 { 34 "name": "DB_HOST", 35 "value": "localhost" 36 }, 37 { 38 "name": "DB_PASSWORD", 39 "value": "simplememodbuse" 40 }, 41 { 42 "name": "DB_USER", 43 "value": "dbuser" 44 } 45 ], 46 "resourceRequirements": null, 47 "ulimits": null, 48 "dnsServers": null, 49 "mountPoints": [], 50 "workingDirectory": null, 51 "secrets": null, 52 "dockerSecurityOptions": null, 53 "memory": null, 54 "memoryReservation": 127, 55 "volumesFrom": [], 56 "stopTimeout": null, 57 "image": "995962138333.dkr.ecr.ap-northeast-1.amazonaws.com/laravelecs:latest", 58 "startTimeout": null, 59 "firelensConfiguration": null, 60 "dependsOn": null, 61 "disableNetworking": null, 62 "interactive": null, 63 "healthCheck": null, 64 "essential": true, 65 "links": null, 66 "hostname": null, 67 "extraHosts": null, 68 "pseudoTerminal": null, 69 "user": null, 70 "readonlyRootFilesystem": null, 71 "dockerLabels": null, 72 "systemControls": null, 73 "privileged": null, 74 "name": "laravel" 75 }, 76 { 77 "dnsSearchDomains": null, 78 "environmentFiles": null, 79 "logConfiguration": { 80 "logDriver": "awslogs", 81 "secretOptions": null, 82 "options": { 83 "awslogs-group": "/ecs/fargate-laravel", 84 "awslogs-region": "ap-northeast-1", 85 "awslogs-stream-prefix": "ecs" 86 } 87 }, 88 "entryPoint": null, 89 "portMappings": [ 90 { 91 "hostPort": 3306, 92 "protocol": "tcp", 93 "containerPort": 3306 94 } 95 ], 96 "command": null, 97 "linuxParameters": null, 98 "cpu": 0, 99 "environment": [], 100 "resourceRequirements": null, 101 "ulimits": null, 102 "dnsServers": null, 103 "mountPoints": [], 104 "workingDirectory": null, 105 "secrets": null, 106 "dockerSecurityOptions": null, 107 "memory": null, 108 "memoryReservation": 128, 109 "volumesFrom": [], 110 "stopTimeout": null, 111 "image": "995962138333.dkr.ecr.ap-northeast-1.amazonaws.com/mariadb:latest", 112 "startTimeout": null, 113 "firelensConfiguration": null, 114 "dependsOn": null, 115 "disableNetworking": null, 116 "interactive": null, 117 "healthCheck": null, 118 "essential": true, 119 "links": null, 120 "hostname": null, 121 "extraHosts": null, 122 "pseudoTerminal": null, 123 "user": null, 124 "readonlyRootFilesystem": null, 125 "dockerLabels": null, 126 "systemControls": null, 127 "privileged": null, 128 "name": "mariadb" 129 } 130 ], 131 "placementConstraints": [], 132 "memory": "512", 133 "taskRoleArn": "arn:aws:iam::995962138333:role/ecsTaskExecusionRole", 134 "compatibilities": [ 135 "EC2", 136 "FARGATE" 137 ], 138 "taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:995962138333:task-definition/fargate-laravel:4", 139 "family": "fargate-laravel", 140 "requiresAttributes": [ 141 { 142 "targetId": null, 143 "targetType": null, 144 "value": null, 145 "name": "com.amazonaws.ecs.capability.logging-driver.awslogs" 146 }, 147 { 148 "targetId": null, 149 "targetType": null, 150 "value": null, 151 "name": "ecs.capability.execution-role-awslogs" 152 }, 153 { 154 "targetId": null, 155 "targetType": null, 156 "value": null, 157 "name": "com.amazonaws.ecs.capability.ecr-auth" 158 }, 159 { 160 "targetId": null, 161 "targetType": null, 162 "value": null, 163 "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19" 164 }, 165 { 166 "targetId": null, 167 "targetType": null, 168 "value": null, 169 "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21" 170 }, 171 { 172 "targetId": null, 173 "targetType": null, 174 "value": null, 175 "name": "com.amazonaws.ecs.capability.task-iam-role" 176 }, 177 { 178 "targetId": null, 179 "targetType": null, 180 "value": null, 181 "name": "ecs.capability.execution-role-ecr-pull" 182 }, 183 { 184 "targetId": null, 185 "targetType": null, 186 "value": null, 187 "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" 188 }, 189 { 190 "targetId": null, 191 "targetType": null, 192 "value": null, 193 "name": "ecs.capability.task-eni" 194 } 195 ], 196 "pidMode": null, 197 "requiresCompatibilities": [ 198 "FARGATE" 199 ], 200 "networkMode": "awsvpc", 201 "cpu": "256", 202 "revision": 4, 203 "status": "ACTIVE", 204 "inferenceAccelerators": null, 205 "proxyConfiguration": null, 206 "volumes": [] 207}

試したこと

・ DB接続先ホスト名を 127.0.0.1に変更
・ MariaDBのDockerfileで EXPOSE 3306
・ MariaDBコンテナ(Fargate)にExecして、データベース確認 → simplememoデータベースは存在している

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

ECSクラスター: Fargateベース
FargateプラットフォームVer: 1.4.0
PHP: 7.4
Laravel: 8.4
MariaDB: 10.4

最後までお読みいただきありがとうございます。

何かヒントなどいただければ大変ありがたく思います。

追記: MariaDBがListenできているところまでは確認できました

Laravelコンテナから見るとlocalhost:3306でlistenしていることがわかりました。

また、DB_HOST=0.0.0.0 でも上手く行きませんでした。
些細なことでも大丈夫なので、ご指摘いただければと思います。

イメージ説明

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

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

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

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

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

guest

回答1

0

自己解決

こちらは自己解決いたしました。

主に2つの原因がありこれらを修正することでタスク内のコンテナ間通信ができました。

  1. Laravelキャッシュにより 127.0.0.1ではなく、localhostでDBにアクセスしてしまっていた。
  2. MariaDBコンテナが立ち上がる前にマイグレーションを行ってしまっていたのでマイグレーションはMariaDBコンテナが 完全に立ち上がってから実行するように修正。

このようにすることで無事に初回起動時にマイグレーションを自動で実行できるようになりました

投稿2021/11/08 06:14

uchida_yuma

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問