前提・実現したいこと
ECS Fargate上でシンプルなLAMPアプリを動かしたい
発生している問題・エラーメッセージ
PHP(Laravel)コンテナからMariadbコンテナへアクセスができない
(ECS Execでphp artisan migrateでも同じエラー)
こちらの記事では、同じタスク内においてはlocalhostで通信ができるようですが、アクセスができなく困っております。
Linking Container in AWS Fargate
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
{ "ipcMode": null, "executionRoleArn": "arn:aws:iam::995962138333:role/ecsTaskExecusionRole", "containerDefinitions": [ { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/fargate-laravel", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "ecs" } }, "entryPoint": null, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": null, "linuxParameters": null, "cpu": 0, "environment": [ { "name": "DB_DATABASE", "value": "simplememo" }, { "name": "DB_HOST", "value": "localhost" }, { "name": "DB_PASSWORD", "value": "simplememodbuse" }, { "name": "DB_USER", "value": "dbuser" } ], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": null, "secrets": null, "dockerSecurityOptions": null, "memory": null, "memoryReservation": 127, "volumesFrom": [], "stopTimeout": null, "image": "995962138333.dkr.ecr.ap-northeast-1.amazonaws.com/laravelecs:latest", "startTimeout": null, "firelensConfiguration": null, "dependsOn": null, "disableNetworking": null, "interactive": null, "healthCheck": null, "essential": true, "links": null, "hostname": null, "extraHosts": null, "pseudoTerminal": null, "user": null, "readonlyRootFilesystem": null, "dockerLabels": null, "systemControls": null, "privileged": null, "name": "laravel" }, { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/fargate-laravel", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "ecs" } }, "entryPoint": null, "portMappings": [ { "hostPort": 3306, "protocol": "tcp", "containerPort": 3306 } ], "command": null, "linuxParameters": null, "cpu": 0, "environment": [], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": null, "secrets": null, "dockerSecurityOptions": null, "memory": null, "memoryReservation": 128, "volumesFrom": [], "stopTimeout": null, "image": "995962138333.dkr.ecr.ap-northeast-1.amazonaws.com/mariadb:latest", "startTimeout": null, "firelensConfiguration": null, "dependsOn": null, "disableNetworking": null, "interactive": null, "healthCheck": null, "essential": true, "links": null, "hostname": null, "extraHosts": null, "pseudoTerminal": null, "user": null, "readonlyRootFilesystem": null, "dockerLabels": null, "systemControls": null, "privileged": null, "name": "mariadb" } ], "placementConstraints": [], "memory": "512", "taskRoleArn": "arn:aws:iam::995962138333:role/ecsTaskExecusionRole", "compatibilities": [ "EC2", "FARGATE" ], "taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:995962138333:task-definition/fargate-laravel:4", "family": "fargate-laravel", "requiresAttributes": [ { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.logging-driver.awslogs" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.execution-role-awslogs" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.ecr-auth" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.task-iam-role" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.execution-role-ecr-pull" }, { "targetId": null, "targetType": null, "value": null, "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "targetId": null, "targetType": null, "value": null, "name": "ecs.capability.task-eni" } ], "pidMode": null, "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "revision": 4, "status": "ACTIVE", "inferenceAccelerators": null, "proxyConfiguration": null, "volumes": [] }
試したこと
・ 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 でも上手く行きませんでした。
些細なことでも大丈夫なので、ご指摘いただければと思います。
まだ回答がついていません
会員登録して回答してみよう