Maison  >  Questions et réponses  >  le corps du texte

Comment partager le schéma de base de données dans les fichiers DockerCompose ?

J'apprends Docker. Je construis une image à partir d'un Dockerfile dans une application de compteur. Et j'utilise MySQL comme base de données. Le fichier DockerCompose utilise une base de données et deux conteneurs de la même image d'application. La base de données Mysql a deux modes différents. Mon objectif est d'avoir des services d'application distincts avec des ports différents (par exemple 9000 et 9001) et ils ont leur propre schéma. Lorsque j'appelle localhost:9000/index, il affiche le premier compteur et lorsque j'appelle localhost:9000/index, il affiche le deuxième compteur.

Mais le problème est qu'ils utilisent tous les deux le premier mode, donc le résultat est le même compteur. Comment isoler l’architecture ?

Rédiger un document->

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粉032977207213 Il y a quelques jours250

répondre à tous(1)je répondrai

  • P粉475315142

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

    Il est préférable d'avoir un docker composé séparé pour chaque application et sa base de données.

    Si vous souhaitez utiliser un seul docker compose pour deux applications, vous pouvez définir deux services distincts pour MySQL avec des schémas et des ports exposés différents, et référencer chacun d'eux dans l'application.

    Il s'agit de la même application pour laquelle vous avez défini deux services.

    Aussi :

    Vous avez mentionné la même application, vous semblez vouloir dire :

    localhost:9000/index

    et

    localhost:9001/index

    répondre
    0
  • Annulerrépondre