从 docker 容器内部向 localhost 发出请求
making requests to localhost from inside docker container
我有一个应用程序在本地主机的 8080 端口上运行。我有一些使用该服务的 python 代码。该代码在我的基本系统上运行良好,但一旦我将它放入 docker 容器中,我就会得到 urllib2.URLError: <urlopen error [Errno 111] Connection refused>
。我有另一个应用程序在端口 6543 上公开了一个 api。同样的问题。
我想我需要告诉 docker 它允许使用某些本地主机端口。我该怎么做?
这里有一些更具体的细节:
我可以在我的基本系统上很好地执行这行代码:
urllib2.urlopen(req, json.dumps(dData))
但是当我尝试从 docker 容器中执行此操作时,我得到:
File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>
我试过为 docker.sock
添加权限
ls -l /var/run/docker.sock
=> srw-rw-rwx 1 root docker 0 Feb 17 11:09 /var/run/docker.sock
使用参数 -net host
创建您的 python 容器,它将与主机共享地址和端口,因此它可以访问主机上 运行 的进度。
参考我的另一个回答:
我有一个应用程序在本地主机的 8080 端口上运行。我有一些使用该服务的 python 代码。该代码在我的基本系统上运行良好,但一旦我将它放入 docker 容器中,我就会得到 urllib2.URLError: <urlopen error [Errno 111] Connection refused>
。我有另一个应用程序在端口 6543 上公开了一个 api。同样的问题。
我想我需要告诉 docker 它允许使用某些本地主机端口。我该怎么做?
这里有一些更具体的细节:
我可以在我的基本系统上很好地执行这行代码:
urllib2.urlopen(req, json.dumps(dData))
但是当我尝试从 docker 容器中执行此操作时,我得到:
File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1227, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 111] Connection refused>
我试过为 docker.sock
添加权限ls -l /var/run/docker.sock
=> srw-rw-rwx 1 root docker 0 Feb 17 11:09 /var/run/docker.sock
使用参数 -net host
创建您的 python 容器,它将与主机共享地址和端口,因此它可以访问主机上 运行 的进度。
参考我的另一个回答: