2017-01-06 7 views
0

Wildfly、MySQL、およびApacheを主な構成要素とする開発者のチームにフルドッカー環境を提供しています。 私はすべてのイメージを本番環境に合わせて事前設定しました。開発者はもう1つのオプション、intellijを使って実行中のwildflyスレーブをデバッグできるように要求しました。DockerでWildflyドメインモードでのデバッグを有効にする - 既に使用中のポート

セットアップ: 人が異なるOSを使用するため、ドッカーをホストする仮想マシンをセットアップしました。 私は、VMをホストするローカルマシンから到達可能でなければならないポートを転送します。これは、彼らがなどDB、wildfly管理VM構成のスクリーンショットと、ここでポートにアクセスすることができ、動作します。 debian machine hosting docker

Dockerfile(作業イマイチ)のデバッグを持つホスト用:

FROM ourerpo/wildfly:base 
 

 
ARG VERSION=8.2.0 
 

 
WORKDIR $JBOSS_USER_HOME 
 

 
ENV JAVA_OPTS='-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=n' 
 

 
ADD srv srv/ 
 

 
RUN mkdir -p $JBOSS_CONF \ 
 
    && mv srv/wildfly.conf.slave $JBOSS_CONF/wildfly.conf \ 
 
    && chown $JBOSS_USER:$JBOSS_USER $JBOSS_CONF \ 
 
    && chmod 644 $JBOSS_CONF \ 
 
    && chown $JBOSS_USER:$JBOSS_USER srv/ -R \ 
 
    && chmod 744 srv/*.sh 
 

 
USER $JBOSS_USER 
 

 
# Move in template host configuration and insert slave key 
 
RUN mv srv/host-slave-${VERSION}.tmpl $JBOSS_DOMAIN/configuration/host-slave.xml \ 
 
    && cat $JBOSS_DOMAIN/configuration/host-slave.xml | sed -e"[email protected]<secret value=\".*\"/>@<secret value=\"somevalue\"/>@" >$JBOSS_DOMAIN/configuration/host-slave.xml.new \ 
 
    && mv $JBOSS_DOMAIN/configuration/host-slave.xml.new $JBOSS_DOMAIN/configuration/host-slave.xml 
 

 
ENTRYPOINT exec /app/wildfly/bin/domain.sh --domain-config=domain.xml --host-config=host-slave.xml -Djboss.domain.master.address=stsdomain -Djboss.bind.address=0.0.0.0

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

 
    JBoss Bootstrap Environment 
 

 
    JBOSS_HOME: /app/wildfly 
 

 
    JAVA: /app/java/bin/java 
 

 
    JAVA_OPTS: -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=n 
 

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

 
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 
 
Listening for transport dt_socket at address: 8787 
 
14:58:27,755 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.3.Final 
 
14:58:27,875 INFO [org.jboss.as.process.Host Controller.status] (main) JBAS012017: Starting process 'Host Controller' 
 
[Host Controller] Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 
 
[Host Controller] ERROR: transport error 202: bind failed: Address already in use 
 
[Host Controller] ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) 
 
[Host Controller] JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750] 
 
[Host Controller] FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) 
 
14:58:28,000 INFO [org.jboss.as.process.Host Controller.status] (reaper for Host Controller) JBAS012010: Process 'Host Controller' finished with an exit status of 134

コンテナとして生成された画像は、次のログnetstatコマンドを使用して、

-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8787,server=y,suspend=n 

ERROR: transport error 202: bind failed: Address already in use 

だからポートが使用中でなければなりませんでも、私はそれを見ることができない:

2つのことに注意する

[email protected]:~/mapped$ netstat -tulpn 
 
(Not all processes could be identified, non-owned process info 
 
will not be shown, you would have to be root to see it all.) 
 
Active Internet connections (only servers) 
 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  PID/Program name 
 
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  - 
 
tcp6  0  0 :::9999     :::*     LISTEN  - 
 
tcp6  0  0 :::8050     :::*     LISTEN  - 
 
tcp6  0  0 :::22     :::*     LISTEN  - 
 
tcp6  0  0 :::13080    :::*     LISTEN  - 
 
tcp6  0  0 :::15672    :::*     LISTEN  - 
 
tcp6  0  0 :::9990     :::*     LISTEN  - 
 
tcp6  0  0 :::5671     :::*     LISTEN  - 
 
tcp6  0  0 :::5672     :::*     LISTEN  - 
 
tcp6  0  0 :::2376     :::*     LISTEN  - 
 
tcp6  0  0 :::3306     :::*     LISTEN  - 
 
udp  0  0 0.0.0.0:68    0.0.0.0:*       - 
 
udp  0  0 172.17.0.1:123   0.0.0.0:*       - 
 
udp  0  0 172.10.12.1:123   0.0.0.0:*       - 
 
udp  0  0 10.0.2.15:123   0.0.0.0:*       - 
 
udp  0  0 127.0.0.1:123   0.0.0.0:*       - 
 
udp  0  0 0.0.0.0:123    0.0.0.0:*       - 
 
udp6  0  0 fe80::1053:e1ff:fed:123 :::*        - 
 
udp6  0  0 fe80::2c88:1cff:fe9:123 :::*        - 
 
udp6  0  0 fe80::42:3dff:fe28::123 :::*        - 
 
udp6  0  0 fe80::58c3:fdff:fe3:123 :::*        - 
 
udp6  0  0 fe80::d435:6fff:fee:123 :::*        - 
 
udp6  0  0 fe80::8091:1aff:fe7:123 :::*        - 
 
udp6  0  0 fe80::2459:65ff:fe0:123 :::*        - 
 
udp6  0  0 fe80::94b2:9fff:fe6:123 :::*        - 
 
udp6  0  0 fe80::42:19ff:fe2f::123 :::*        - 
 
udp6  0  0 fe80::a00:27ff:fef4:123 :::*        - 
 
udp6  0  0 ::1:123     :::*        - 
 
udp6  0  0 :::123     :::*        -

ドッカーがコンテナで検査する:

 "NetworkSettings": { 
 
      "Bridge": "", 
 
      "SandboxID": "9ac8dad9fd93a0fb9bdff4c068b8e925aa9ff941df4f81033ce910a093f36a78", 
 
      "HairpinMode": false, 
 
      "LinkLocalIPv6Address": "", 
 
      "LinkLocalIPv6PrefixLen": 0, 
 
      "Ports": { 
 
       "11080/tcp": null, 
 
       "8787/tcp": null, 
 
       "8899/tcp": null

物事は私が試してみました: は何か他に8787から-Djava.awt.headless=t rue -agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8787

-Djava.awt.headless=t rue -agentlib:jdwp=transport=dt_socket,address=8787への変更ポートを変更します。 ポートを公開し、公開しません。 サーバー= Y、サーバー= N

私が実行している: ドッカーバージョン1.11.2、 Wildfly 8.2 ドッカーネットワークは検査:

[email protected]:~/mapped$ docker network inspect compose_stsdevnet 
 
[ 
 
    { 
 
     "Name": "compose_thenet", 
 
     "Id": "9a17953da5f9698f3f27cf18d9d41751d049774439a53629fdcd69a996e370db", 
 
     "Scope": "local", 
 
     "Driver": "bridge", 
 
     "EnableIPv6": false, 
 
     "IPAM": { 
 
      "Driver": "default", 
 
      "Options": null, 
 
      "Config": [ 
 
       { 
 
        "Subnet": "172.10.12.0/24" 
 
       } 
 
      ] 
 
     }, 
 
     "Internal": false, 
 
     "Containers": { 
 
<other containers here> 
 

 
<failing container>   "9094b4136707e643df69fdff7dc04432a8d9c36275c3ae6dc6f2286393d3753a": { 
 
       "Name": "stupefied_stonebraker", 
 
       "EndpointID": "0c425d16334ecf3127233156d9770dc286bf72f57d778efe01fafb4696a17012", 
 
       "MacAddress": "02:42:ac:0a:0c:03", 
 
       "IPv4Address": "172.10.12.3/24", 
 
       "IPv6Address": "" 
 
      }, 
 
<the domain>   "e4dd4f67f33df6643c691aa74a71dc4a8d69738004dfbe09b20c3061bd3bc614": { 
 
       "Name": "stsdomain", 
 
       "EndpointID": "0c89e70edbddb34f7be6b180a289480e1ac57ef482a651f0addce167eaa1110a", 
 
       "MacAddress": "02:42:ac:0a:0c:18", 
 
       "IPv4Address": "172.10.12.24/24", 
 
       "IPv6Address": "" 
 
      } 
 
     }, 
 
     "Options": {}, 
 
     "Labels": {} 
 
    }

任意のアイデアや提案だろう大変感謝しています。前もって感謝します。

答えて

1

この値を環境変数JAVA_OPTSに設定すると、プロセスコントローラとホストコントローラの両方に使用されます。プロセスコントローラーがバインドしようとすると、ホストコントローラーにポート8787でリッスンしているデバッグエージェントが既に存在するため、エラーが表示されます。

実際にサーバー上でアプリケーションをデバッグしたいと思うでしょう。それがあなたのhost-slave.xmlの場合には、次のようなものを特定のサーバーに追加する必要があります。

<jvm name="default"> 
    <jvm-options> 
     <option value="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"/> 
    </jvm-options> 
</jvm> 

例:

<servers> 
    <server name="server-one" group="main-server-group"> 
     <jvm name="default"> 
      <jvm-options> 
       <option value="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"/> 
      </jvm-options> 
     </jvm> 
    </server> 
    <server name="server-two" group="other-server-group"> 
     <!-- 
      ~ server-two avoids port conflicts by incrementing the ports in 
      ~     the default socket-group declared in the server-group 
      --> 
     <socket-bindings port-offset="150"/> 
    </server> 
</servers> 
+0

それは働きます! :) 両方のプロセスで使用されているとは思わなかった。迅速な答えと説明に感謝します。 –

関連する問題