Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk berkongsi skema pangkalan data dalam fail DockerCompose?

Saya sedang belajar Docker. Saya sedang membina imej daripada Dockerfile dalam aplikasi kaunter. Dan saya menggunakan mysql sebagai pangkalan data. Fail DockerCompose menggunakan satu pangkalan data dan dua bekas daripada imej aplikasi yang sama. Pangkalan data Mysql mempunyai dua mod yang berbeza. Matlamat saya adalah untuk mempunyai perkhidmatan aplikasi yang berasingan dengan port yang berbeza (cth. 9000 dan 9001) dan mempunyai skema mereka sendiri. Apabila saya memanggil localhost:9000/index ia menunjukkan kaunter pertama dan apabila saya memanggil localhost:9000/index ia menunjukkan kaunter kedua.

Tetapi masalahnya ialah mereka berdua menggunakan mod pertama, jadi hasilnya adalah kaunter yang sama. Bagaimana untuk mengasingkan seni bina?

Tulis dokumen->

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:

permohonan.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粉032977207235 hari yang lalu264

membalas semua(1)saya akan balas

  • P粉475315142

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

    Adalah lebih baik untuk membuat karang docker yang berasingan untuk setiap aplikasi dan pangkalan datanya.

    Jika anda hanya mahu menggunakan satu karang docker untuk dua aplikasi, anda boleh menentukan dua perkhidmatan berasingan untuk mysql dengan skema dan port terdedah yang berbeza, dan merujuk setiap satu daripadanya dalam aplikasi.

    Ini adalah aplikasi yang sama yang mana anda mempunyai dua perkhidmatan yang ditakrifkan.

    Juga:

    Anda menyebut apl yang sama, anda nampaknya bermaksud:

    localhost:9000/index

    dan

    localhost:9001/index

    balas
    0
  • Batalbalas