在下面的示例中,由于我有很多環境變數,我無法使用 java -jar 命令選項直接運行 ENTRYPOINT。相反,我使用了 entrypoint.sh
Dockerfile
ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,address=9251,server=y,suspend=n
RUN ["chmod", "777", "entrypoint.sh"]
ENTRYPOINT ["bash","entrypoint.sh"]
EXPOSE 9251
入口點.sh
java $JVM_OPTS $JAVA_OPTS org.springframework.boot.loader.JarLauncher
docker-compose.yaml
version: '3.1'
services:
bus:
image: sample-image
network_mode: "host"
ports:
- 9251:9251
environment:
- DEBUG_PORT=9251
- JVM_OPTS=-Xms1G -Xmx5G -XX:MaxMetaspaceSize=512m -XX: UseG1GC
在下面的快照中,我們可以看到服務何時啟動并啟用了除錯

運行sudo netstat -tulpn | grep :9251節目時
泊塢窗在我試圖從本地 Windows 機器連接的 linux 機器中運行。另請注意,我必須將 network_mode 保持為host.


uj5u.com熱心網友回復:
碼頭工人部分:
您可以嘗試洗掉host網路模式嗎?并檢查它是否有效。
或者,我看不出在這里使用埠轉發的理由,這兩種配置是相互排斥的。
從檔案中:
如果您對容器使用主機網路模式,則該容器的網路堆疊不會與 Docker 主機隔離(容器共享主機的網路命名空間),并且容器不會獲得自己的 IP 地址分配。例如,如果您運行系結到埠 80 的容器并使用主機網路,則容器的應用程式可在主機 IP 地址的埠 80 上使用。
然后:
注意:由于容器在使用主機模式聯網時沒有自己的IP地址,埠映射不生效,-p、--publish、-P和--publish-all選項被忽略
所以底線你不應該在 network-mode=host 中處理埠轉發,只要確保你的埠在主機上可用。
Java部分:
看起來您的“java”部分沒問題,但是它有一個細微差別:根據實際的 java 版本,遠程服務器選項會略有變化:
例如在 java 11 中你應該使用:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:9251
在java 8中:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=:9251
請注意已更改的“*”。所以你應該試試...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429721.html
