我正在学习 Docker。我在计数器应用程序中从 Dockerfile 构建图像。而且我使用mysql作为数据库。 DockerCompose 文件使用来自同一应用程序映像的一个数据库和两个容器。 Mysql 数据库有两种不同的模式。我的目标是使用具有不同端口(例如 9000 和 9001)的单独应用程序服务,并且它们有自己的架构。当我调用 localhost:9000/index 时,它显示第一个计数器,当我调用 localhost:9000/index 时,它显示第二个计数器。
但问题是它们都使用第一个模式,因此结果是相同的计数器。如何隔离架构?
撰写文件->
version: '3.1' services: mysql: image: mysql restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password volumes: - mysql_data:/var/lib/mysql hello-docker: image: hello-docker:0.0.2 restart: always environment: DB_CONNECTION_IP: mysql DB_SCHEMA_NAME: hello-counter ports: - "9000:9000" volumes: - mysql_data:/var/lib/mysql hello-docker2: image: hello-docker:0.0.2 restart: always environment: DB_CONNECTION_IP: mysql DB_SCHEMA_NAME: hello_counter2 ports: - "9001:9000" volumes: mysql_data:
application.yaml->
spring: datasource: url: &connectionUrl jdbc:mysql://${DB_CONNECTION_IP:localhost}:${DB_CONNECTION_PORT:3306}/${DB_SCHEMA_NAME}?allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8 username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate.ddl-auto: validate generate-ddl: true show-sql: true properties.hibernate.format_sql: true server: port: 9000
最好为每个应用程序及其数据库提供单独的 docker compose。
如果您只想为两个应用程序使用一个 docker compose,则可以使用不同的公开架构和端口为 mysql 定义两个单独的服务,并在应用程序中引用它们中的每一个。
这与您为其定义了两个服务的应用程序相同。
此外:
您提到了同一个应用程序,您的意思似乎是:
本地主机:9000/索引
和
本地主机:9001/索引