我创建了一个使用mysql数据库的spring启动应用程序。我使用docker compose启动数据库。
services:
adminer:
image: adminer
restart: always
ports:
- 8888:8080
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'example' # TODO: Change this
volumes:
- "./config/my.conf:/etc/mysql/conf.d/config-file.cnf"
- "./data:/var/lib/mysql:rw"
SpringBoot应用程序(后端)目前不使用docker,我在eclipse中运行它。在启动后端之前,我必须为ipaddress grep docker容器:
docker inspect mysql_ex_db_1 | grep 'IPAddress'
结果是这样的(这个确切的地址会随着时间的变化)
"IPAddress": "",
"IPAddress": "172.21.0.2",
然后取这个值,设置 spring.datasource.url
在文件中的eclipse内部 Application.properties
用它。
spring.datasource.url=jdbc:mysql://172.21.0.2:3306/employee_management_system?allowPublicKeyRetrieval=true&useSSL=false&createDatabaseIfNotExist=true
在这之后,我可以在eclipse中启动后端连接到数据库,一切正常。
现在我想将后端的启动从eclipse移到我用来启动数据库的docker compose文件中。因此,我构建了一个图像,并附加了docker compose文件:
version: '3.1'
services:
adminer:
image: adminer
restart: always
ports:
- 8888:8080
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'example' # TODO: Change this
volumes:
- "./config/my.conf:/etc/mysql/conf.d/config-file.cnf"
- "./data:/var/lib/mysql:rw"
backend:
image: backend:latest
restart: always
ports:
- 8090:8080
在这种情况下,如何在中配置IP地址 spring.datasource.url
? 每当我重新启动mysql容器时,确切的ipaddress就会改变。
spring.datasource.url=jdbc:mysql://172.21.0.2:3306/employee_management_system?allowPublicKeyRetrieval=true&useSSL=false&createDatabaseIfNotExist=true
那么我应该写什么来代替“172.21.0.2”?
我在这里尝试localhost,但似乎不起作用。
2条答案
按热度按时间q5iwbnjs1#
首先,可以设置如下环境变量
spring.datasource.url
在你的 Docker 形象之外。这允许您根据部署需要动态设置这些变量(比如连接到dev或prod数据库)。从docker compose文件运行的所有docker容器都运行在同一个虚拟网络中,它们的服务名称与其在该网络中的主机名相对应。当您想从停靠的spring后端访问数据库时,主机名和端口将是
db:3306
. 您可以覆盖spring.datasource.url
在docker文件中,通过引入如下环境变量来编写:lg40wkob2#
将此环境变量添加到
backend
在docker-compose
: