ホームページ  >  に質問  >  本文

DockerCompose ファイルでデータベース スキーマを共有するにはどうすればよいですか?

私は Docker を学んでいます。カウンターアプリケーションでDockerfileからイメージを構築しています。そしてデータベースとしてmysqlを使用します。 DockerCompose ファイルは、同じアプリケーション イメージからの 1 つのデータベースと 2 つのコンテナを使用します。 Mysql データベースには 2 つの異なるモードがあります。私の目標は、異なるポート (例: 9000 と 9001) を持つ個別のアプリケーション サービスを用意し、独自のスキーマを持つことです。 localhost:9000/index を呼び出すと最初のカウンタが表示され、localhost:9000/index を呼び出すと 2 番目のカウンタが表示されます。

しかし、問題は、どちらも最初のパターンを使用しているため、結果は同じカウンターになることです。アーキテクチャをどのように分離するか?

ファイルの書き込み->

バージョン: '3.1'

サービス:

  mysql:
    画像: mysql
    再起動: 常に
    ポート:
      - 「3306:3306」
    環境:
      MYSQL_ROOT_PASSWORD: パスワード
    ボリューム:
      - mysql_data:/var/lib/mysql


  こんにちはドッカー:
    画像: hello-docker:0.0.2
    再起動: 常に
    環境:
      DB_CONNECTION_IP: mysql
      DB_SCHEMA_NAME: こんにちはカウンター
    ポート:
        - 「9000:9000」
    ボリューム:
        - mysql_data:/var/lib/mysql

  こんにちは-docker2:
    画像: hello-docker:0.0.2
    再起動: 常に
    環境:
      DB_CONNECTION_IP: mysql
      DB_SCHEMA_NAME: hello_counter2
    ポート:
      - 「9001:9000」

ボリューム:
  mysql_data:

application.yaml->

###春: 情報元: 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&zeroDateTime Behavior=convertToNull&useUnicode=true&characterEncoding=UTF-8 ユーザー名: ルート パスワード: パスワード ドライバークラス名: com.mysql.cj.jdbc.Driver jpa: hibernate.ddl-auto: 検証する 生成-ddl: true show-sql: true プロパティ.hibernate.format_sql: true サーバ: ポート: 9000
P粉032977207P粉032977207213日前249

全員に返信(1)返信します

  • P粉475315142

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

    アプリケーションとそのデータベースごとに個別の Docker Compose を使用するのが最善です。

    2 つのアプリケーションに対して 1 つの docker compose のみを使用したい場合は、公開されたスキーマとポートが異なる 2 つの別個の mysql サービスを定義し、アプリケーション内でそれぞれを参照できます。

    これは、2 つのサービスが定義されている同じアプリケーションです。

    ###また:###

    同じアプリケーションについて言及しましたが、次のことを意味しているようです:

    ローカルホスト:9000/インデックス

    ###そして###

    ローカルホスト:9001/インデックス

    返事
    0
  • キャンセル返事