如何在基于Alpine映像的Dockered应用程序中启用WebSocket连接(WebSocketAddressExc



我已经按照Predix Volcano应用程序的模型创建了一个Predix Cloud应用程序。我可以从我的windows笔记本电脑或Ubuntu虚拟机成功地将时间序列发送到这样的应用程序。为此,我使用PredixPy。数据时间序列摄取uri如下所示:"wss://gateway-predix-data-services....".

然而,当我尝试从我的dockerized(Alpine(python应用程序发送时间序列时,我会收到下面的错误。

edge@renedge:~/testcloud$ docker logs testcloud
Traceback (most recent call last):
File "main.py", line 162, in <module>
main(mock=debug)
File "main.py", line 142, in main
timeseries.send()
File "/root/.local/lib/python2.7/site-packages/predix/data/timeseries.py", line 416, in send
return self._send_to_timeseries(msg)
File "/root/.local/lib/python2.7/site-packages/predix/data/timeseries.py", line 325, in _send_to_timeseries
ws = self._get_websocket()
File "/root/.local/lib/python2.7/site-packages/predix/data/timeseries.py", line 314, in _get_websocket
self.ws = websocket.create_connection(url, header=headers)
File "/root/.local/lib/python2.7/site-packages/websocket/_core.py", line 494, in create_connection
websock.connect(url, **options)
File "/root/.local/lib/python2.7/site-packages/websocket/_core.py", line 217, in connect
options.pop('socket', None))
File "/root/.local/lib/python2.7/site-packages/websocket/_http.py", line 113, in connect
hostname, port, is_secure, proxy)
File "/root/.local/lib/python2.7/site-packages/websocket/_http.py", line 154, in _get_addrinfo_list
raise WebSocketAddressException(e)
websocket._exceptions.WebSocketAddressException: [Errno -3] Try again
edge@renedge:~/testcloud$  WebSocketAddressException(e)WebSocketAddressException: [Errno -3]

相同的代码在docker容器之外工作!在下面你可以找到我的Dockerfile的内容(我已经隐藏了代理地址(:

FROM registry.gear.ge.com/predixmachine/alpine-x86_64
MAINTAINER Giulio Braini
# Install python packages
RUN apk add --update python py-pip python-dev
RUN apk add make automake gcc g++ subversion python3-dev
RUN pip install --upgrade pip
RUN pip install docker --user
RUN pip install predix==0.0.8 --user
# Set environmental variables
ENV HTTP_PROXY "http://XXX.XXX.XXX.XXX:80/"
ENV HTTPS_PROXY "http://XXX.XXX.XXX.XXX:80/"
COPY . /app
WORKDIR /app
CMD ["python", "main.py"]

怎么了?

我自己想出来的!这确实是我的docker容器的问题,而不是Python代码的问题。Dockerfile中需要另外三条线路:

FROM registry.gear.ge.com/predixmachine/alpine-x86_64
MAINTAINER Giulio Braini
# Install python packages
RUN apk add --update python py-pip python-dev
RUN apk add make automake gcc g++ subversion python3-dev
RUN apk --no-cache add ca-certificates
RUN pip install --upgrade pip
RUN pip install docker --user
RUN pip install predix==0.0.8 --user
# Set environmental variables
ENV HTTP_PROXY "http://XXX.XXX.XXX.XXX:80/"
ENV HTTPS_PROXY "http://XXX.XXX.XXX.XXX:80/"
ENV http_proxy "http://XXX.XXX.XXX.XXX:80/"
ENV https_proxy "http://XXX.XXX.XXX.XXX:80/"
COPY . /app
WORKDIR /app
CMD ["python", "main.py"]

最新更新