我试图在一台机器上创建多个Prisma数据库服务.我无法使用Docker Compose在3306以外的端口上创建MySQL数据库.
泊坞窗,compose.yml
version: '3'
services:
hackernews:
image: prismagraphql/prisma:1.8
restart: always
ports:
- "${CLIENT_PORT}:${INTERNAL_PORT}"
environment:
PRISMA_CONFIG: |
port: $INTERNAL_PORT
managementApiSecret: $PRISMA_MANAGEMENT_API_SECRET
databases:
default:
connector: mysql
host: mysql
port: $SQL_INTERNAL_PORT
user: root
password: $SQL_PASSWORD
migrations: true
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: $SQL_PASSWORD
volumes:
- ./custom/:/etc/mysql/conf.d/my.cnf
- mysql:/var/lib/mysql
volumes:
mysql:
泊坞窗,compose.override.yml
version: '3'
services:
mysql:
expose:
- "${SQL_INTERNAL_PORT}"
ports:
- "${SQL_CLIENT_PORT}:${SQL_INTERNAL_PORT}"
错误:
hackernews_1 | Exception in thread "main" java.sql.SQLTransientConnectionException: database - Connection is not available,request timed out after 5008ms.
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
hackernews_1 | at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
hackernews_1 | at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:18)
hackernews_1 | at slick.jdbc.JdbcBackend$BaseSession.
码头工人
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab721996469d mysql:5.7 "docker-entrypoint.s…" 42 minutes ago Up 55 seconds 3306/tcp,0.0.0.0:3307->3307/tcp two_mysql_1
7aab98e2b8d7 prismagraphql/prisma:1.8 "/bin/sh -c /app/sta…" 2 hours ago Restarting (1) Less than a second ago two_hackernews_1
.ENV
SQL_PASSWORD=myuniquepassword
SQL_INTERNAL_PORT=3307
SQL_CLIENT_PORT=3307
最佳答案
变量SQL_INTERNAL_PORT可能具有3307值.您需要将其更改为3306.
此外,您可以删除
expose:
- "${SQL_INTERNAL_PORT}"
线. Mysql已经公开了3306端口.
集群中的所有应用程序都使用内部端口(在mysql情况下为3306).外部端口(在部分端口中)只需要外部字通信.
如果你想拥有几个数据库,你需要更改docker-compose这样的东西:
version: '3'
services:
hackernews:
image: prismagraphql/prisma:1.8
restart: always
ports:
- "${CLIENT_PORT}:${INTERNAL_PORT}"
environment:
PRISMA_CONFIG: |
port: $INTERNAL_PORT
managementApiSecret: $PRISMA_MANAGEMENT_API_SECRET
databases:
default:
connector: mysql
host: mysql_first
port: 3306
user: root
password: $SQL_PASSWORD
migrations: true
second:
connector: mysql
host: mysql_second
port: 3306
user: root
password: $SQL_PASSWORD
migrations: true
mysql_first:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: $SQL_PASSWORD
ports:
- 3307:3306
volumes:
- ./custom/:/etc/mysql/conf.d/my.cnf
- mysql:/var/lib/mysql
mysql_second:
image: mysql:5.7
restart: always
environment:
ports:
- 3308:3306
MYSQL_ROOT_PASSWORD: $SQL_PASSWORD