diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 5119cbe44..ed2689c6f 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -101,6 +101,8 @@ services: - ./logs/wvp:/opt/wvp/logs/ environment: TZ: "Asia/Shanghai" + # docker env + RUN_ENV: "docker" # 流链接的IP Stream_IP: ${Stream_IP} # SDP里的IP diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java index f633c2b7d..0aa7e2ed6 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -5,6 +5,7 @@ import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.GbStringMsgParserFactory; import com.genersoft.iot.vmp.gb28181.conf.DefaultProperties; import com.genersoft.iot.vmp.gb28181.transmit.ISIPProcessorObserver; +import com.genersoft.iot.vmp.utils.EnvUtil; import gov.nist.javax.sip.SipProviderImpl; import gov.nist.javax.sip.SipStackImpl; import lombok.extern.slf4j.Slf4j; @@ -174,6 +175,9 @@ public class SipLayer implements CommandLineRunner { } public String getLocalIp(String deviceLocalIp) { + if(EnvUtil.isDockerEnv()){ + return sipConfig.getShowIp(); + } if (monitorIps.size() == 1) { return monitorIps.get(0); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java index a99e044a1..3c4b453d7 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo; import com.genersoft.iot.vmp.gb28181.utils.SipUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import com.genersoft.iot.vmp.utils.EnvUtil; import com.genersoft.iot.vmp.utils.GitUtil; import com.genersoft.iot.vmp.utils.IpPortUtil; import gov.nist.javax.sip.message.SIPRequest; @@ -334,6 +335,9 @@ public class SIPRequestHeaderProvider { public Request createAckRequest(String localIp, SipURI sipURI, SIPResponse sipResponse) throws ParseException, InvalidArgumentException, PeerUnavailableException { + if(EnvUtil.isDockerEnv()){ + localIp = sipLayer.getLocalIp(localIp); + } // via ArrayList viaHeaders = new ArrayList(); ViaHeader viaHeader = SipFactory.getInstance().createHeaderFactory().createViaHeader(localIp, sipConfig.getPort(), sipResponse.getTopmostViaHeader().getTransport(), SipUtils.getNewViaTag()); diff --git a/src/main/java/com/genersoft/iot/vmp/utils/EnvUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/EnvUtil.java new file mode 100644 index 000000000..5bca3687e --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/utils/EnvUtil.java @@ -0,0 +1,8 @@ +package com.genersoft.iot.vmp.utils; + +public class EnvUtil { + + public static boolean isDockerEnv() { + return "docker".equals(System.getenv("RUN_ENV")); + } +} diff --git a/src/main/resources/配置详情.yml b/src/main/resources/配置详情.yml index 29461d186..ed43e2264 100644 --- a/src/main/resources/配置详情.yml +++ b/src/main/resources/配置详情.yml @@ -101,6 +101,7 @@ sip: # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。 ip: 0.0.0.0 # [可选] 没有任何业务需求,仅仅是在前端展示的时候用 + # [docker环境下必选] 在docker环境中运行时,此配置为sip对外的ip地址, 必须配置,否则无法正常使用 show-ip: 192.168.0.100 # [可选] 28181服务监听的端口 port: 5060