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

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

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

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

AWS(Amazon Web Services)

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

解決済

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

uchida_yuma
uchida_yuma

総合スコア44

Docker

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

AWS(Amazon Web Services)

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

1回答

0評価

0クリップ

845閲覧

投稿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

{ "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 でも上手く行きませんでした。
些細なことでも大丈夫なので、ご指摘いただければと思います。

イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Docker

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

AWS(Amazon Web Services)

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