web-dev-qa-db-ja.com

DockerでSpring-Bootをデバッグする

何らかの理由で、リモートデバッグをDocker内で実行されているSpring-Bootアプリに接続する際に問題が発生します。 Javaアプリを次のコマンドで起動します:

Java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar app.jar

Dockerの場合、docker-composeでこれらのポートを公開します。

ports:
- "8080:8080"
- "8000:8000"

ただし、デバッガーはポート8000​​で接続できません。サーバーをローカルで実行すると機能しますが、Docker内では機能しません。理由は何ですか?

Docker ps出力:

CONTAINER ID        IMAGE                       COMMAND                CREATED               STATUS              PORTS                                            NAMES
0d17e6851807        pocmanager_manager:latest   "/bin/sh -c 'Java -D   3 seconds ago       Up 2 seconds        0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp   pocmanager_manager_1   
35ed2e2c32bc        redis:latest                "/entrypoint.sh redi   14 seconds ago      Up 13 seconds       0.0.0.0:6379->6379/tcp                           pocmanager_redis_1
14
Jarle Hansen

dockerFileでは、Exposeコマンドは作業の半分しか実行しないことを理解する必要があります。これは、Dockerの内部のポートのみを公開し、外部には公開しないことを意味します。この例では、結果は次のようになります。

enter image description here

デバッグはJava_OPTSおよびリモートデバッグで機能します。dockerFileは次のようになります。

FROM frolvlad/Alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT [ "sh", "-c", "Java $Java_OPTS -jar /app.jar" ]

次のコマンドを実行します。

docker run -e "Java_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y" -p 8080:8080 -p 8000:8000 -t springio/gs-spring-boot-docker

ご覧のとおり、私の場合(Eclipse)8000の場合、実行中にデバッグポートを公開する必要があります。

enter image description here

enter image description here

11
nekperu15739

こんにちは私は同じ問題に直面しました。

Dockerfileのエントリポイントに以下を追加しました。

"-agentlib:jdwp = transport = dt_socket、address = 8000、server = y、suspend = n"

これで、次のようになります。

FROM Java:8
VOLUME /tmp
ADD realName*.jar app.jar
EXPOSE 4786
RUN sh -c 'touch /app.jar'
ENTRYPOINT
["Java","-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

DockerfileでExposeport8000を実行しませんでした。

お役に立てれば。

8
SWiggels

これは、Virtual Box VM構成がデバッグポートをホストマシンにトンネリングしないためである可能性があります。

このリンクを確認してください https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

基本的に、あなたの場合、プロンプトを実行して実行する必要があります

VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,8000,,8000";

注:VBoxManageがPATHに含まれていることを確認してください

0
Palanivelrajan