2016-06-12 160 views
1

我正在學習Docker,這對我來說是全新的。我已經能夠創建的JBoss/wildfly圖像,然後我能夠使用此Dockerfile我的應用程序啓動JBoss:Docker Jboss/wildfly:如何添加數據源和MySQL連接器

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 

但是當我運行投訴tha的圖像時出現錯誤TA的文件或目錄未找到:

建築形象

$ 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 

有人可以讓我知道我可以訪問文件系統,所以我可以檢查哪些文件或目錄抱怨?有沒有更好的方法來調試呢?

我相信那是後話與慶典有關這是因爲下面的回聲無法打印

謝謝你這麼多


我去到SSH方式對劇本的第一行稱容器來檢查裏面的東西。

1)的ssh到搬運工機:搬運工機的ssh默認 2)檢查與所述命令中的容器ID:搬運工PS -a 3)ssh來與該命令的容器:須藤搬運工EXEC -i -t 665b4a1e17b6 /斌/慶典 4)我可以檢查出「的/ opt/JBoss的/ wildfly /定製/」目錄與預期的文件

定製目錄具有下列權限,並列出這樣的存在:

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

和定製目錄內的文件dir

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 

,如果我嘗試執行該文件我得到這個錯誤

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

這是否帶來光明什麼?

非常感謝你

+0

由於您只是更新xml文件,因此應用修補程序或將完全替換standalone-full.xml與具有所有更改的副本 –

回答

1

我相信execute.sh找不到。您可以通過運行以下命令,查找結果確認是一個空目錄:

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

這樣做的原因是要在不同的(虛擬)機比在本地系統上做你的身材,所以它的拉「自定義「文件夾。我會在虛擬機中運行構建,並將想要導入的文件放置到構建可以找到它的虛擬機上。

+0

感謝您的快速響應可能更容易。結果是這樣的:[ls:無法訪問C:/ Program Files/Git/opt/jboss/wildfly/customization /:沒有這樣的文件或目錄]他爲什麼認爲是在我的C盤Git目錄下? – mpssantos

+0

這是意想不到的,在Windows集成中進入虛擬機,我不太清楚,我的所有Docker知識都在Linux端。它確實遵循典型的Docker在未提供完整版本時添加相對目錄的行爲,另一個想法是嘗試使用「ADD」命令傳遞c:/ Program Files/...路徑。 – BMitch

1

我發現了這個問題。 execute.sh文件使用windows eof。我轉換到UNIX並開始工作。

相關問題