Docker Jboss / wildfly:如何添加数据源和MySQL连接器

我正在学习Docker,这对我来说是全新的。 我已经能够创build一个jboss / wildfly图像,然后我可以用我的应用程序使用这个Dockerfile启动jboss:

FROM jboss/wildfly CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0"] ADD mywebapp-web/target/mywebapp-1.0.war /opt/jboss/wildfly/standalone/deployments/mywebapp-1.0.war 

现在我想添加一个数据源到独立和MySQL连接器的MySQL数据库的支持。 为此,我正在关注这个例子:

https://github.com/arun-gupta/docker-images/tree/master/wildfly-mysql-javaee7

以下是我的dockerfile和我的execute.sh脚本

Dockerfile:

 FROM jboss/wildfly:latest ADD customization /opt/jboss/wildfly/customization/ CMD ["/opt/jboss/wildfly/customization/execute.sh"] 

执行脚本代码:

 #!/bin/bash # Usage: execute.sh [WildFly mode] [configuration file] # # The default mode is 'standalone' and default configuration is based on the # mode. It can be 'standalone.xml' or 'domain.xml'. echo "=> Executing Customization script" JBOSS_HOME=/opt/jboss/wildfly JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh JBOSS_MODE=${1:-"standalone"} JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"} function wait_for_server() { until `$JBOSS_CLI -c ":read-attribute(name=server-state)" 2> /dev/null | grep -q running`; do sleep 1 done } echo "=> Starting WildFly server" echo "JBOSS_HOME : " $JBOSS_HOME echo "JBOSS_CLI : " $JBOSS_CLI echo "JBOSS_MODE : " $JBOSS_MODE echo "JBOSS_CONFIG: " $JBOSS_CONFIG echo $JBOSS_HOME/bin/$JBOSS_MODE.sh -b 0.0.0.0 -c $JBOSS_CONFIG & $JBOSS_HOME/bin/$JBOSS_MODE.sh -b 0.0.0.0 -c $JBOSS_CONFIG & echo "=> Waiting for the server to boot" wait_for_server echo "=> Executing the commands" $JBOSS_CLI -c --file=`dirname "$0"`/commands.cli # Add MySQL module module add --name=com.mysql --resources=/opt/jboss/wildfly/customization/mysql-connector-java-5.1.39-bin.jar --dependencies=javax.api,javax.transaction.api # Add MySQL driver /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-xa-datasource-class-name=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource) # Deploy the WAR #cp /opt/jboss/wildfly/customization/leadservice-1.0.war $JBOSS_HOME/$JBOSS_MODE/deployments/leadservice-1.0.war echo "=> Shutting down WildFly" if [ "$JBOSS_MODE" = "standalone" ]; then $JBOSS_CLI -c ":shutdown" else $JBOSS_CLI -c "/host=*:shutdown" fi echo "=> Restarting WildFly" $JBOSS_HOME/bin/$JBOSS_MODE.sh -b 0.0.0.0 -c $JBOSS_CONFIG 

但是,当我运行图像抱怨没有find文件或目录时出现错误:

build筑物图像

 $ docker build -t mpssantos/leadservice:latest . Sending build context to Docker daemon 19.37 MB Step 1 : FROM jboss/wildfly:latest ---> b8279b641e82 Step 2 : ADD customization /opt/jboss/wildfly/customization/ ---> aea03d4f2819 Removing intermediate container 0920e2cd97fd Step 3 : CMD /opt/jboss/wildfly/customization/execute.sh ---> Running in 8a0dbcb01855 ---> 10335320b89d Removing intermediate container 8a0dbcb01855 Successfully built 10335320b89d SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories. 

运行图像

 $ docker run mpssantos/leadservice no such file or directory Error response from daemon: Cannot start container 5d3357ba17afa36e81d8794f2b0cd45cc00dde955b2b2054282c4ef17dd4f265: [8] System error: no such file or directory 

有人可以让我知道如何访问文件系统,所以我可以检查哪个文件或目录是抱怨? 有没有更好的方法来debugging呢?

我相信这是与脚本的第一行中提到的bash相关的东西,因为下面的回显不被打印

非常感谢


我做了ssh的容器来检查里面的东西。

1)ssh到docker机:docker-machine ssh默认2)使用以下命令检查容器id:docker ps -a 3)ssh到容器中:sudo docker exec -i -t 665b4a1e17b6 / bin / bash 4 )我可以检查“/ opt / jboss / wildfly / customization /”目录是否存在预期的文件

自定义目录具有以下权限,如下所示:

 drwxr-xr-x 2 root root 4096 Jun 12 23:44 customization drwxr-xr-x 10 jboss jboss 4096 Jun 14 00:15 standalone 

和定制目录里面的文件

 drwxr-xr-x 2 root root 4096 Jun 12 23:44 . drwxr-xr-x 12 jboss jboss 4096 Jun 14 00:15 .. -rwxr-xr-x 1 root root 1755 Jun 12 20:06 execute.sh -rwxr-xr-x 1 root root 989497 May 4 11:11 mysql-connector-java-5.1.39-bin.jar 

如果我尝试执行该文件,我得到这个错误

 [jboss@d68190e4f0d8 customization]$ ./execute.sh bash: ./execute.sh: /bin/bash^M: bad interpreter: No such file or directory 

这是否为任何事物带来了光明?

再次感谢你

我相信execute.sh没有find。 您可以通过运行以下命令来validation结果是一个空目录:

 docker run mpssantos/leadservice ls -al /opt/jboss/wildfly/customization/ 

原因是你正在使用与本地系统不同的(虚拟)机器来构build,因此它正在从该虚拟机中取出“自定义”文件夹。 我将在虚拟机中运行构build,并将要导入的文件放置在构build可以find它的虚拟机上。

我发现这个问题。 execute.sh文件是用windows eof。 我转换到UNIX并开始工作。