Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Docker内部连接到模拟服务器的python套接字(使用OPC UA)失败_Python_Docker_Networking_Opc_Opc Ua - Fatal编程技术网

从Docker内部连接到模拟服务器的python套接字(使用OPC UA)失败

从Docker内部连接到模拟服务器的python套接字(使用OPC UA)失败,python,docker,networking,opc,opc-ua,Python,Docker,Networking,Opc,Opc Ua,我很确定这是一个标准的网络套接字问题。我目前正在对接我的应用程序,它使用pythonpy-opcua(OPC-UA)包。你对如何解决这个问题有什么想法,或者我可以尝试一些建议吗 我已经设置了一个带有节点的模拟服务器,它在我的Mac机器上本地运行(这里没有Dockerization!): 现在,我正试图使用py opcuaClient类连接到上述服务器,该类连接如下(该部分在docker容器中运行!同样,从我的本地计算机): 当我运行docker容器时,客户端无法连接到模拟服务器。具体来说,当(试

我很确定这是一个标准的网络套接字问题。我目前正在对接我的应用程序,它使用pythonpy-opcua(OPC-UA)包。你对如何解决这个问题有什么想法,或者我可以尝试一些建议吗

我已经设置了一个带有节点的模拟服务器,它在我的Mac机器上本地运行(这里没有Dockerization!):

现在,我正试图使用py opcua
Client
类连接到上述服务器,该类连接如下(该部分在docker容器中运行!同样,从我的本地计算机):

当我运行docker容器时,客户端无法连接到模拟服务器。具体来说,当(试图)建立连接时,docker容器崩溃

我尝试运行以下
docker run
命令,所有这些命令都会产生相同的错误:

docker run --env-file env/.local-docker.env -i --rm -p 50001:50001 image_name
我得到的错误总是来自客户端的套接字连接失败。具体而言,我收到以下错误消息:

Logfile will be save in:  ./logs/log_2020-03-01 18:54:36.769166.log
Connecting to... "opc.tcp://0.0.0.0:50001/"
  File "/usr/local/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/app/deploy/middleware/loop.py", line 96, in <module>
    opc_reader_rt = RealTimeReader(opc_path)
  File "/app/deploy/opc_client/dataset.py", line 40, in __init__
    self.client.connect()
  File "/usr/local/lib/python3.6/site-packages/opcua/client/client.py", line 256, in connect
    self.connect_socket()
  File "/usr/local/lib/python3.6/site-packages/opcua/client/client.py", line 281, in connect_socket
    self.uaclient.connect_socket(self.server_url.hostname, self.server_url.port)
  File "/usr/local/lib/python3.6/site-packages/opcua/client/ua_client.py", line 256, in connect_socket
    return self._uasocket.connect_socket(host, port)
  File "/usr/local/lib/python3.6/site-packages/opcua/client/ua_client.py", line 155, in connect_socket
    sock = socket.create_connection((host, port), timeout=self.timeout)
  File "/usr/local/lib/python3.6/socket.py", line 704, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/local/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
日志文件将保存在:./logs/log_2020-03-01 18:54:36.769166.log中
正在连接到。。。“opc。tcp://0.0.0.0:50001/"
文件“/usr/local/lib/python3.6/runpy.py”,第193行,在“运行”模块中作为“主”
“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
文件“/usr/local/lib/python3.6/runpy.py”,第85行,在运行代码中
exec(代码、运行\全局)
文件“/app/deploy/middleware/loop.py”,第96行,在
opc\u reader\u rt=实时读卡器(opc\u路径)
文件“/app/deploy/opc_client/dataset.py”,第40行,在__
self.client.connect()
文件“/usr/local/lib/python3.6/site packages/opcua/client/client.py”,第256行,在connect中
self.connect_插座()
文件“/usr/local/lib/python3.6/site packages/opcua/client/client.py”,第281行,在connect_套接字中
self.uaclient.connect\u套接字(self.server\u url.hostname、self.server\u url.port)
文件“/usr/local/lib/python3.6/site packages/opcua/client/ua_client.py”,第256行,在connect_套接字中
返回self.\u套接字。连接\u套接字(主机、端口)
文件“/usr/local/lib/python3.6/site packages/opcua/client/ua_client.py”,第155行,在connect_套接字中
sock=socket.create_连接((主机,端口),timeout=self.timeout)
文件“/usr/local/lib/python3.6/socket.py”,第704行,在create_connection中
对于getaddrinfo(主机、端口、0、SOCK_流)中的res:
文件“/usr/local/lib/python3.6/socket.py”,第745行,在getaddrinfo中
对于_socket.getaddrinfo(主机、端口、系列、类型、协议、标志)中的res:
socket.gaierror:[Errno-2]名称或服务未知

结果表明,环境变量错误地读取了双引号。Mac上的la

Docker使用虚拟机,因此您无法使用传统主机网络-您需要使用两个环境都知道并可以连接的网络。临时测试的最简单方法是使用Mac的本地IP从容器连接,例如,
10.x.x.x
(使用
ifconfig
查找实际值)。另一个选项是通过创建一个桥接网络,如果您有一个动态本地IP,两者都将共享。@ldg所以我尝试设置一个公共网络,docker compose,并连接到我使用ifconfig找到的指定mac IP(10.x.x.x)。这些方法似乎都不起作用,它们都会产生相同的错误。这可能是由于一些docker桌面设置安装错误造成的吗?我还创建了一个python shell来检查DNS解析是否有效。是的。它也在本地工作,没有docker。正在检查是否可以使用非urllib库连接到模拟服务器
docker run --env-file env/.local-docker.env -i --rm -p 50001:50001 image_name
docker run --env-file env/.local-docker.env -i --rm --network host image_name
docker run --env-file env/.local-docker.env -i --rm --network=host image_name
Logfile will be save in:  ./logs/log_2020-03-01 18:54:36.769166.log
Connecting to... "opc.tcp://0.0.0.0:50001/"
  File "/usr/local/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/app/deploy/middleware/loop.py", line 96, in <module>
    opc_reader_rt = RealTimeReader(opc_path)
  File "/app/deploy/opc_client/dataset.py", line 40, in __init__
    self.client.connect()
  File "/usr/local/lib/python3.6/site-packages/opcua/client/client.py", line 256, in connect
    self.connect_socket()
  File "/usr/local/lib/python3.6/site-packages/opcua/client/client.py", line 281, in connect_socket
    self.uaclient.connect_socket(self.server_url.hostname, self.server_url.port)
  File "/usr/local/lib/python3.6/site-packages/opcua/client/ua_client.py", line 256, in connect_socket
    return self._uasocket.connect_socket(host, port)
  File "/usr/local/lib/python3.6/site-packages/opcua/client/ua_client.py", line 155, in connect_socket
    sock = socket.create_connection((host, port), timeout=self.timeout)
  File "/usr/local/lib/python3.6/socket.py", line 704, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/local/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known