搜索

首页  >  问答  >  正文

如何在 DockerCompose 文件中共享数据库架构?

我正在学习 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

P粉032977207P粉032977207258 天前286

全部回复(1)我来回复

  • P粉475315142

    P粉4753151422024-03-20 14:54:05

    最好为每个应用程序及其数据库提供单独的 docker compose。

    如果您只想为两个应用程序使用一个 docker compose,则可以使用不同的公开架构和端口为 mysql 定义两个单独的服务,并在应用程序中引用它们中的每一个。

    这与您为其定义了两个服务的应用程序相同。

    此外:

    您提到了同一个应用程序,您的意思似乎是:

    本地主机:9000/索引

    本地主机:9001/索引

    回复
    0
  • 取消回复