複数コンテナ間の通信について(Docker VS AWS-ECS:Fargate)

一昔前の「Apache+PHP+Mysql」構成をサーバーレスに対応したとき、はまったメモ

docker-compose.ymlの場合

wwwコンテナから、dbコンテナのmysql を接続する場合、

$ ping mysql-name で通る。

version: “3”
services:
 www:
  container_name: php-${VerNo}
  image: php/apps:${VerNo}
  ports:
       – 80:80
 db:
  container_name: mysql-name
  image: sys/mysql-name
  environment:
   MYSQL_HOST: mysql-name
   MYSQL_ROOT_PASSWORD: pass
   MYSQL_DATABASE: dbname
   MYSQL_USER: dbuser
   MYSQL_PASSWORD: pass
   MYSQL_PWD: pass
   TZ: ‘Asia/Tokyo’
 ports:
   – ‘3306:3306’

ただし、mysqlにつなげるときは、以下の対応が必要(セキュリティ的には?)

# mysql -u dbuser -pap -h mysql-name

MySQL [(none)]>

mysql> SELECT User, Host, Plugin FROM mysql.user;
+——————+———–+———————–+
| User | Host | Plugin |
+——————+———–+———————–+
| dbuser | % | mysql_native_password |
| root | % | caching_sha2_password |
| anpiusr | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+——————+———–+———————–+
7 rows in set (0.00 sec)

AWS-ECS(Fargate)の場合

問題はAWS側、同様にできるかと思ったが、コツがあった♫

どうも、Fargateは、1つのEC2内にコンテナが同居している感じ、”127.0.0.1“でつながった。

# mysql -u anpiusr -pap -h mysql-name
ERROR 2005 (HY000): Unknown MySQL server host ‘mysql-name’ (2)

# mysql -u anpiusr -pap -h localhost
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

# mysql -u anpiusr -pap -h 127.0.0.1

MySQL [(none)]>

 

タイトルとURLをコピーしました