我正在使用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容器名称是在网络“ dev-network”上运行的“ mysqlcontainer”,我已经在第二个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容器。我确实尝试创建单个taskdefinition,其中添加了两个容器,并且两个容器都成功运行,但是在spring boot日志中,它说无法创建与mysql容器的通信。
有人可以分享一些信息以在AWS ECS中支持该设置吗?还是可以分享一些链接/教程/博客,我可以在其中看到mysql + springboot应用程序设置如何在AWS ECS中支持?如果我能够站起来这些容器,那么我需要创建/附加卷以将数据持久存储在AWS中。预先感谢...
答案 0 :(得分:0)
我能够在ECS中成功设置此春季启动+ mysql设置。以下是遵循的步骤。
由于我使用了fargate类型,因此我们不能使用link来引用其他容器,而是在Spring Boot应用程序yml数据源url中使用了127.0.0.1 ip地址,以便它将引用同一网络中的本地主机。这解决了容器链接问题,我相信我们会有更好的选择,但暂时我正在使用此选项。
datasource:
url: jdbc:mysql://127.0.0.1:3306/sample