【问题标题】:Linking a SQL Server with a liferay instance running in a docker container将 SQL Server 与在 docker 容器中运行的 liferay 实例链接
【发布时间】:2016-04-14 13:44:27
【问题描述】:

正如标题所说,我正在尝试在 docker 容器中运行 liferay。然后从那里连接到外部节点上的数据库。

我可以从 docker 容器内成功地 ping 运行 SQL Server 的服务器,但是,当我尝试通过 liferay 的配置界面连接到数据库时,它只是说无法建立连接,并且日志说明用户登录失败。

如果不可能,我明白,只是想更好地了解这个小混乱。

================================================ ========================

请注意,我一直使用snasello's docker image for liferay,除了取出预先配置的数据库以强制liferay进入配置页面。我用

启动容器
docker run --rm -it -i 8080:8080 {whatever the local name of the image is}

00:00:34,301 WARN [C3P0PooledConnectionPoolManager[identityToken->21r35xoL]-HelperThread-#6][BasicResourcePool:1851] com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@3b17c58d -- 采集尝试失败!!!清除挂起的获取。在尝试获取所需的新资源时,我们未能成功超过允许的最大获取尝试次数 (3)。上次获取尝试异常: java.sql.SQLException:无法打开登录请求的数据库“lportal”。登录失败。 在 net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) 在 net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) 在 net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) 在 net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:603) 在 net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:345) 在 net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3.java:50) 在 net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 在 com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:146) 在 com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:195) 在 com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:211) 在 com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1086) 在 com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess (BasicResourcePool.java:1073) 在 com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:44) 在 com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1810) 在 com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648) 00:00:34,301 WARN [C3P0PooledConnectionPoolManager[identityToken->21r35xoL]-HelperThread-#6][BasicResourcePool:894] 获取资源失败,com.mchange.v2.resourcepool.BasicResourcePool@80d65ef 正在中断所有线程等待资源检查。将再次尝试响应新的客户端请求。 00:00:34,303 WARN [C3P0PooledConnectionPoolManager[identityToken->21r35xoL]-HelperThread-#9][BasicResourcePool:894] 未能获取资源,com.mchange.v2.resourcepool.BasicResourcePool@80d65ef 正在中断所有等待资源检查。将再次尝试响应新的客户端请求。 00:00:34,304 WARN [C3P0PooledConnectionPoolManager[identityToken->21r35xoL]-HelperThread-#1][BasicResourcePool:894] 获取资源失败,com.mchange.v2.resourcepool.BasicResourcePool@80d65ef 正在中断所有线程等待资源检查。将再次尝试响应新的客户请求。

【问题讨论】:

  • 如何从 Liferay 连接到 MS SQL 数据库?
  • 我偏离了在Liferay's Fourm找到的方向
  • 太棒了,所以应该可以,你必须在 Dockerfile 中做和在 Linux 上做的一样的事情
  • 好吧,我在 docker 容器上跟踪了那些,但没有用。
  • 发布docker logs container_iddocker events的输出

标签: sql-server docker liferay


【解决方案1】:

您应该使用 --link docker 标志将 mysql 容器链接到 liferay 容器。您提供给 mysql 容器的别名应该是 db_lep

docker run -d --name mysqldb --env-file=.crendentials mysql

docker run -d --link mysqldb:db_lep -p 8080:8080 {whatever the local name of the image is}

如果您看到https://github.com/snasello/docker-liferay-6.2/blob/master/lep/portal-bd-MYSQL.properties,则数据库的主机是db_lep。如果您提供自己的属性文件,那么您应该将别名更改为属性中的任何内容。如果您使用的是本地主机,那么您应该让容器共享同一个网络(本地主机),而不是链接。

【讨论】:

  • 我正在尝试使用非容器数据库。实际上在另一台机器上。
【解决方案2】:

重新检查错误,结果发现 SQL 服务器的身份验证存在问题。通过this helpful post 解决。

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2018-10-10
    • 2022-01-02
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多