【发布时间】:2020-11-22 11:43:24
【问题描述】:
我正在使用 docker 容器使用 mysql + springboot 进行简单的项目,并且我能够在本地运行而没有任何问题。我试图将相同的容器带到 AWS ECS 以使其正常运行,但我面临着多个问题。我确实研究了多个文档和博客,但无法获得正确的内容来完成这项工作。
我使用下面的方法在我的本地用“mysqlcontainer”的容器名称来建立mysql
docker run --restart always --name mysqlcontainer --net dev-network -v /Users/myuser/Develop/mysql_data/8.0:/var/lib/mysql -p 3306:3306 -d
-e MYSQL_ROOT_PASSWORD=password mysql:8.0
一旦 mysql 站起来,我就运行以下命令来带上我的 springboot 应用程序。这是一个简单的springboot服务,对mysql进行CRUD操作。
docker run -d -p 8061:8061 --name user-mysqlapp --net dev-network
--link mysqlcontainer user-mysql
mysql 容器名称是“mysqlcontainer”,它在网络“dev-network”上运行,我在第二个 docker 命令中使用了这些容器和网络名称来支持 springboot 应用程序,因为两个容器需要在同一个容器中相互通信网络。
这里是 springboot 应用程序的 docker 文件。
FROM openjdk:8-jdk-alpine
EXPOSE 8061 ARG
JAR_FILE=target/user-mysql.jar
ADD ${JAR_FILE} user-mysql.jar
ENTRYPOINT ["java","-jar","user-mysql.jar"]
这是 springboot 应用程序中 application.yml 中使用的数据源。
datasource:
url: jdbc:mysql://mysqlcontainer:3306/sample
username: dummy
password: password
driver-class-name: com.mysql.jdbc.Driver
在两个容器都运行后,我能够将mysql与mysqldeveloper连接起来,并能够执行以下命令。
CREATE USER 'dummy'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'dummy'@'%';
create database sample;
use sample;
我在本地执行此设置没有任何问题,我确实将 springboot 应用程序映像推送到 dockerhub 以在 AWS ECS 中使用。
问题陈述:
如果我在 ECS 中单独运行 mysql 容器,我可以运行它并使用本地的 mysql 开发人员进行连接。但如果我尝试运行 springboot 应用程序映像,它无法与 mysql 容器正确链接。我尝试使用 awsvpc 网络模式在 FARGATE 实例类型中无法提供指向 mysql 容器的链接。我确实尝试创建单个任务定义,其中添加了两个容器并且它们都成功运行,但是在 Spring Boot 日志中,它说无法创建与 mysql 容器的通信。
有人可以分享一些信息以在 aws ecs 中支持此设置或分享一些链接/教程/博客,我可以在其中查看此 mysql + springboot 应用程序设置如何在 aws ecs 中支持?如果我能够站起来这些容器,那么我需要创建/附加卷以将数据保存在 aws 中。提前谢谢...
【问题讨论】:
标签: mysql spring-boot docker docker-compose amazon-ecs