我试图在一台机器上创建多个prisma数据库服务。我无法使用docker compose在3306以外的端口上创建mysql数据库。
docker-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:
docker-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.<init>(JdbcBackend.scala:439)
hackernews_1 | at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:47)
hackernews_1 | at slick.jdbc.JdbcBackend$DatabaseDef.createSession(JdbcBackend.scala:38)
hackernews_1 | at slick.basic.BasicBackend$DatabaseDef.acquireSession(BasicBackend.scala:218)
hackernews_1 | at slick.basic.BasicBackend$DatabaseDef.acquireSession$(BasicBackend.scala:217)
hackernews_1 | at slick.jdbc.JdbcBackend$DatabaseDef.acquireSession(JdbcBackend.scala:38)
hackernews_1 | at slick.basic.BasicBackend$DatabaseDef$$anon$2.run(BasicBackend.scala:239)
hackernews_1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
hackernews_1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
hackernews_1 | at java.lang.Thread.run(Thread.java:748)
hackernews_1 | Caused by: java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=mysql)(port=3307)(type=master) : Connection refused (Connection refused)
hackernews_1 | at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:161)
hackernews_1 | at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.connException(ExceptionMapper.java:79)
hackernews_1 | at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1040)
hackernews_1 | at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:490)
hackernews_1 | at org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:144)
hackernews_1 | at org.mariadb.jdbc.Driver.connect(Driver.java:90)
hackernews_1 | at slick.jdbc.DriverDataSource.getConnection(DriverDataSource.scala:101)
hackernews_1 | at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:341)
hackernews_1 | at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:193)
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:430)
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool.access$500(HikariPool.java:64)
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:570)
hackernews_1 | at com.zaxxer.hikari.pool.HikariPool$PoolEntryCreator.call(HikariPool.java:563)
hackernews_1 | at java.util.concurrent.FutureTask.run(FutureTask.java:266)
Docker ps
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
.环境
SQL_PASSWORD=myuniquepassword
SQL_INTERNAL_PORT=3307
SQL_CLIENT_PORT=3307
3条答案
按热度按时间30byixjq1#
在我的例子中,我不能改变mysql端口而不是3306,直到我添加
MYSQL_TCP_PORT
so样品:ne5o7dgx2#
变量
SQL_INTERNAL_PORT
可能有3307
价值观。你需要把它改成3306
.此外,您还可以删除
线。mysql已经公开了3306端口。
集群中的所有应用程序都使用内部端口(mysql中为3306)。外部端口(在部分端口中)仅用于外部字通信。
如果您想拥有多个数据库,则需要更改docker compose,如下所示:
ryoqjall3#
我也有同样的问题。我创建了docker-compose.yml,它运行得非常好。
为应用程序容器添加以下说明(以wordpress为例):
(db wordpress是db name容器)
为数据库容器添加以下说明:
您可以创建具有不同端口的任何db容器。只需更改虚拟端口并公开端口。对于您的应用程序,容器db名称。
我希望,这对别人有帮助。