我正在學習 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=UTSSwuseSSLmSam&SSLval_JSvateSvSult=DatSvSvS告訴遠&STSMSMulvS告訴SDSMformSDSM活動表&DSMSetSatSMSetvS告訴SjSSvSSvS告訴Sjkkk555&SSLSMetvSvSvS未來表&JDSv.SvvSvS告訴SformSDSk活動S活動表&DSvSvS%S%SjvSvvSvSoozk_SetvSSvS告訴SconSadSvSvS告訴SadSkSdeconSkvSdeconsep.SM.SMformSatSconSt.St. C&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/索引
#