如何从docker容器连接到远程mysql主机?



我有一个远程mysql主机。

我创建了一个简单的spring启动应用程序。

我已经创建了这个项目的.jar文件。

我已经从这个app.jar中创建了一个docker映像

我已经创建了一个使用这个主机的容器。一切正常,但问题是:

使用配置文件中提供的参数。

对于类文件中提供的参数使用此方法可以正常工作:

docker run  --name app1 -p 8000:8080 app-image:v1

我需要做的是连接到一个随机主机提供当我创建一个容器,而不是链接(或耦合)到这个特定的服务器。

步骤如下:

1。——Dockerfile

FROM openjdk:8
VOLUME /tmp
EXPOSE 8080:8080
ADD ./target/app-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

2。-创建图像

docker build -t app-image:v1 . 

3。-创建一个容器

docker run  --name app1 -p 8000:8080 app-image:v1

工作正常,但使用datasourcecconfig中的参数

4。-我的配置在春季启动应用程序(v2.4.3)是这样的:

@Configuration
public class DatasourceConfig {
@Bean
public DataSource datasource() {
return DataSourceBuilder.create()
.driverClassName("com.mysql.cj.jdbc.Driver")
.url("jdbc:mysql://mysql-remote.net:8192/test-database")
.username("root")
.password("q")
.build(); 
}
}

我已经尝试了几个选项来覆盖默认选项,像这样:

docker run  --name app1 -p 8001:8080 -e MYSQL_USER=root -e MYSQL_PASSWORD=q  -e MYSQL_DATABASE=jdbc:mysql://mysql-remote.net:8192/test-database app-image:v1

但是我得到:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

有什么建议吗?

感谢更新1:在本地工作时,我使用以下配置:

@Bean
public DataSource datasource() {
return DataSourceBuilder.create()
.driverClassName("com.mysql.cj.jdbc.Driver")
.url("jdbc:mysql://localhost:3306/test-database?serverTimezone=UTC&CuseLegacyDatetimeCode=false")
.username("root")
.password("q")
.build(); 
}

我用这个配置创建docker映像。我知道传递参数应该覆盖这个配置,但是没有办法。

我用了Ashok写的东西,但是不管用

UPDATE 2 (RESOLVED)

在datasourcecconfig中添加此代码,使用默认值在本地工作:

@Value("${custom.property.url:jdbc:mysql://localhost:3306/test-database?serverTimezone=UTC&CuseLegacyDatetimeCode=false}")
String url;
@Value("${custom.property.username:root}")
String username;
@Value("${custom.property.password:q}")
String password;

@Bean
public DataSource datasource() {
return DataSourceBuilder.create()
.driverClassName("com.mysql.cj.jdbc.Driver")
.url(url)
.username(username)
.password(password)
.build(); 
}
}

之后,我像往常一样创建映像,并像这样运行容器(覆盖参数并从我的docker容器连接到外部mysql主机)。我用几个容器测试了这个应用程序,它工作得很好!

docker run --name app1 -p 8001:8080 -e custom.property.username=root -e custom.property.password=q  -e custom.property.url=jdbc:mysql://localhost:3306/test-database?serverTimezone=UTC&CuseLegacyDatetimeCode=false app-image:v1

谢谢你的帮助!

应该是:SPRING_DATASOURCE_URL,MYSQL_USER,MYSQL_ROOT_PASSWORD

docker run  --name app1 -p 8001:8080 -e MYSQL_USER=root -e MYSQL_ROOT_PASSWORD=q  -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql-remote.net:8192/test-database app-image:v1

尝试以下配置

码头工人/Linux终端:

docker run --name dreamsql -p 3306:3306 
-e MYSQL_ROOT_PASSWORD=mypwd 
-e MYSQL_USER=myuser 
-e MYSQL_PASSWORD=<Password> 
-e MYSQL_DATABASE=mydata 
-d mysql:5.7

Windows CMD提示符:

docker run --name dreamsql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypwd -e MYSQL_USER=myuser -e MYSQL_PASSWORD=<Password> -e MYSQL_DATABASE=mydata -d mysql:5.7

CHECK_BELOW应根据您的要求替换为下面的一个:

  • localhost for docker desktop

  • 192.168.99.100 for docker toolbox

  • 远程MySQL实例的IP地址

    "jdbc: mysql://& lt; CHECK_BELOW>: 3306/mydata"

注意: username (MYSQL_USER(MYSQL_PASSWORD)

相关内容

  • 没有找到相关文章

最新更新