Closed red81227 closed 1 year ago
container連接localhost需另外設定
@red81227 不好意思,請問一下您說的 container連接localhost需另外設定 ,是怎麼設定的?
在 Linux 上,host.docker.internal
通常是不可用的。这个域名主要是在 Docker Desktop for Mac 和 Windows 环境中引入的,用于方便容器访问宿主机上的服务。然而,在 Linux 环境中,Docker 没有默认支持这个功能。
要在 Linux 环境中让 Docker 容器访问宿主机上的 localhost
服务,可以使用以下几种方法:
docker0
网桥)获取宿主机的 IP 地址:
在 Linux 上,Docker 使用 docker0
网络接口来处理默认桥接网络。可以通过以下命令获取宿主机在 docker0
网桥上的 IP 地址:
ip addr show docker0
典型的 IP 地址可能是 172.17.0.1
。
在容器中使用这个 IP 地址: 一旦你知道了宿主机的 IP 地址,你可以在容器内通过该地址访问宿主机的服务。例如,如果宿主机上在端口 8080 运行了一个服务,你可以在容器中这样访问它:
curl http://172.17.0.1:8080
--network="host"
模式启动容器时指定 --network="host"
:
在 Linux 上,你可以使用 --network="host"
选项启动容器。这会让容器直接使用宿主机的网络堆栈,因此容器中的 localhost
就是宿主机的 localhost
。
docker run --rm --network="host" your-image
在这种模式下,容器内的任何服务都可以直接通过 localhost
访问宿主机的服务。
在 Docker Compose 中使用:
如果你使用 Docker Compose,可以在 docker-compose.yml
中设置 network_mode: "host"
:
version: '3'
services:
app:
image: your-image
network_mode: "host"
/etc/hosts
在容器内手动配置 /etc/hosts
文件:
你可以将宿主机的 IP 地址映射到 host.docker.internal
,这样你仍然可以使用这个域名来访问。
在启动容器时添加一个命令,将 IP 地址添加到 /etc/hosts
文件中:
docker run -it --add-host=host.docker.internal:172.17.0.1 your-image
这样你就可以在容器内通过 host.docker.internal
访问宿主机。
host.docker.internal
默认不可用。docker0
网桥上的 IP 地址(通常是 172.17.0.1
)来访问宿主机服务。--network="host"
模式启动容器,让容器共享宿主机的网络堆栈。/etc/hosts
文件,将宿主机 IP 地址手动映射到 host.docker.internal
。
您好 ! 可否請問關於測試系統與outstation連線的問題,感謝!
我使用opendnp3將outstation執行於本地環境 AddTCPServer設為 LOCAL_IP : 0.0.0.0 PORT: 20000
兩次 AddOutstation分別設 LocalAddr = 4 RemoteAddr = 3 和 LocalAddr = 5 RemoteAddr = 3
啟動dreams tester之後設定ip 127.0.0.1 port 20000如下
但連線皆失敗,使用wireshark也沒觀察到dnp3.0的封包,想請問設定上有甚麼錯誤? 對DNP3十分陌生,可否提供協助,感謝!
另外自己起的master可以觀察到dnp3.0的封包,也有看到from 4 to 3和 from 5 to 3 如下,master也可以scan到outstation的資料。
另外觀察 dreamscloudjointtester_dnp3-master_1的docker logs,master似乎是有成功起起來的。
感謝!