Hibernate 如何在docker环境下用Mysql启动Aerogear统一推送服务器

Hibernate 如何在docker环境下用Mysql启动Aerogear统一推送服务器,hibernate,jdbc,docker,wildfly,aerogear,Hibernate,Jdbc,Docker,Wildfly,Aerogear,我正努力在docker环境中使用mysql数据库启动aerogear统一推送服务器。我正在跟踪调查 因此,我启动了一个mysql docker容器 docker run --name aerogearsql -e MYSQL_ROOT_PASSWORD=sqlpwd -d mysql 在此基础上,我应用了aerogear文档中所述的内容 docker exec -ti aerogearsql -u root -p mysql> create database unifiedpush de

我正努力在docker环境中使用mysql数据库启动aerogear统一推送服务器。我正在跟踪调查

因此,我启动了一个mysql docker容器

docker run --name aerogearsql -e MYSQL_ROOT_PASSWORD=sqlpwd -d mysql
在此基础上,我应用了aerogear文档中所述的内容

docker exec -ti aerogearsql -u root -p
mysql> create database unifiedpush default character set = "UTF8" default collate = "utf8_general_ci";
mysql> create user 'unifiedpush'@'localhost' identified by 'unifiedpush';
mysql> GRANT SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,DROP ON unifiedpush.* TO 'unifiedpush'@'localhost';
然后,我使用以下docker文件准备了一个docker图像,应用aerogear文档中的内容。这是docker文件

FROM jboss/wildfly
MAINTAINER yves.nicolas@dynamease.com


ENV AEROGEAR_VERSION 1.0.3
ENV AEROGEAR_FILES /usr/local/share/aerogear
ENV AEROGEAR_DIR $AEROGEAR_FILES/aerogear-unifiedpush-server-$AEROGEAR_VERSION
ENV JBOSS_HOME /opt/jboss/wildfly


# Run everything below as root user
USER root

# Set the Java environment variable
ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk

RUN mkdir -p $AEROGEAR_FILES && chmod -R ugo+rwx $AEROGEAR_FILES

# Install Maven it will be needed for my SQL
RUN curl -L -o /etc/yum.repos.d/epel-apache-maven.repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo \
    && yum -y install apache-maven && yum clean all

# Switch back to jboss user
USER jboss


# Get Aerogear version
WORKDIR $AEROGEAR_FILES

RUN curl -L -o aerogear-unifiedpush-server-$AEROGEAR_VERSION-dist.tar.gz https://github.com/aerogear/aerogear-unifiedpush-server/releases/download/$AEROGEAR_VERSION/aerogear-unifiedpush-server
-$AEROGEAR_VERSION-dist.tar.gz \
    && tar -xvf aerogear-unifiedpush-server-$AEROGEAR_VERSION-dist.tar.gz  \
    && cp -r aerogear-unifiedpush-server-$AEROGEAR_VERSION/databases/src/main/resources/modules/com $JBOSS_HOME/modules/


# Do Sql Dependency maven
RUN mvn dependency:copy -Dartifact=mysql:mysql-connector-java:5.1.18 -DoutputDirectory=$JBOSS_HOME/modules/com/mysql/jdbc/main/

# can remove maven at this stage
USER root
RUN yum -y erase apache-maven && yum clean all

# Switch back to jboss user
USER jboss


WORKDIR $JBOSS_HOME

VOLUME $JBOSS_HOME

EXPOSE 8443

CMD ["/opt/jboss/wildfly/bin/standalone.sh","-b","0.0.0.0"]
从这张图片中,我启动了一个链接到mysql的容器

docker run  --name essaipush --link aerogearsql:mysql -v /home/yves:/host -p 8443:8443 yvnicolas/aerogear
Wildfly服务器启动良好,尚未部署任何组件 然后,我使用docker exec应用了mysql cli脚本

$ ./path/to/SERVER_HOME/bin/jboss-cli.sh --file=/path/to/mysql-database-config-wildfly.cli
在我更新mysql-database-config-wildfly.cli以使用mysql而不是localhost作为数据库访问主机之后

仍然使用docker exec,我最终将2个war文件移动到standalone/deployment目录中,但这并不顺利,因为它似乎找不到数据库

下面是一些异常的副本。由于我对Hibernate和Jboss不熟悉,我无法判断根本原因是来自Hibernate.not set还是来自这两个容器之间的通信问题

20:07:47,524 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "unifiedpush-server-wildfly.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"unifiedpush-server-wildfly.war#unifiedpush-default\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"unifiedpush-server-wildfly.war#unifiedpush-default\": org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set"}}

aused by: java.sql.SQLException: Access denied for user 'unifiedpush'@'172.17.0.33' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:312)
20:07:47524错误[org.jboss.as.controller.management operation](部署扫描线程-2)WFLYCTL0013:操作(“部署”)失败-地址:([((“部署”=>“unifiedpush服务器wildfly.war”)))-故障描述:{“WFLYCTL0080:失败的服务”=>{“jboss.persistenceunit.\“unifiedpush服务器wildfly.war”=>“org.jboss.msc.service.StartException in service jboss.persistenceunit.\“unifiedpush server wildfly.war#unifiedpush default\”:org.hibernate.hibernate异常:未设置“hibernate.dial”时,对方言解析信息的访问不能为空
原因:org.hibernate.HibernateException:未设置“hibernate.dialogue”}时,对方言解析信息的访问不能为空
原因:java.sql.SQLException:用户'unifiedpush'@'172.17.0.33'的访问被拒绝(使用密码:是)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)上
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:3541)
在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)上
位于com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
位于com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:792)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
位于org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:312)

我们现在有了docker compose yml文件(适用于1.1.0)

还有一点关于这个的文档:

我们现在有了docker compose yml文件(适用于1.1.0)

还有一点关于这个的文档:

您的mysql用户似乎不允许使用
172.17.0.33
登录,您是否尝试将权限授予
'unifiedpush'@'172.17.0.33'
?172.17.0.33是docker为已使用统一推送启动的容器分配的ip地址。这个错误表明在某个地方有一个临时访问localhost://3306 好像我在mysql-database-config-wildfly.cli中所做的更改还不够。似乎您的mysql用户不允许使用
172.17.0.33
登录,您是否尝试将特权授予
'unifiedpush'@'172.17.0.33'
?172.17.0.33是由docker为容器分配的ip地址,该容器已以统一推送开始。这个错误表明在某个地方有一个临时访问localhost://3306 好像我在mysql-database-config-wildfly.cli中所做的更改还不够。感谢您的提示,这是一个好的开始。仍然需要做一些工作来调整文档中的内容来准备数据库,但是我启动了服务器,没有Java错误。我仍然无法通过导航器访问它。我已将docker容器链接到端口8443(-p 8443:8443),通过访问会出现错误“无法显示您试图查看的页面,因为无法验证接收到的数据的真实性。”尝试了基于quick web reading的各种firefox证书选项,但bud无法修复该错误。有什么线索吗?这里也没有运气,我使用docker compose启动了MySQL,然后运行服务器,我得到了DB错误、未找到表、未找到Android变体,最后它说:无法启动的服务:服务jboss.persistenceunit。“ag push.war#unifiedpush default”。如何配置UnifiedPushServer以使用使用docker compose创建的MySQL服务器?感谢您的提示,这是一个很好的开始。仍然需要做一些工作来调整文档中的内容来准备数据库,但是我启动了服务器,没有Java错误。我仍然无法通过导航器访问它。我已将docker容器链接到端口8443(-p 8443:8443),通过访问会出现错误“无法显示您试图查看的页面,因为无法验证接收到的数据的真实性。”尝试了基于quick web reading的各种firefox证书选项,但bud无法修复该错误。任何俱乐部