【发布时间】:2017-02-26 19:00:43
【问题描述】:
我正在尝试创建 2 个 docker 容器并以它们可以通过 localhost 中的端口相互通信的方式运行它们。我创建了 2 个 python 文件作为发送者和接收者。当我在没有 docker 的情况下运行它们时,它们可以很好地交流。但使用 docker 时,它们无法正常运行。
发件人
Python 脚本
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import socket
import time
import sys
print sys.argv[1]
print sys.argv[2]
for i in range(1,10):
time.sleep(2)
data = "My parameters that I want to share with the server on ith iteration %d" % (i)
print "sedning data: %d" % (i)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((sys.argv[1], int(sys.argv[2])))
sock.sendall(data)
sock.close()
Dockerfile
FROM ubuntu
RUN \
apt-get update && \
apt-get install -y python python-dev python-pip python-virtualenv && \
rm -rf /var/lib/apt/lists/*
ADD script.py /root/script.py
CMD python -u /root/script.py $SEND_HOST $SEND_PORT
接收器
Python 脚本
#!/usr/bin/python
# -*- encoding: utf-8 -*-
import socket
import sys
print sys.argv[1]
print sys.argv[2]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((sys.argv[1], int(sys.argv[2])))
s.listen(3)
while True:
conn, addr = s.accept()
data = conn.recv(1024)
conn.close()
print "received data from sender: %s" % (data)
Dockerfile
FROM ubuntu
RUN \
apt-get update && \
apt-get install -y python python-dev python-pip python-virtualenv && \
rm -rf /var/lib/apt/lists/*
ADD script.py /root/script.py
CMD python -u /root/script.py $LISTEN_HOST $LISTEN_PORT
为接收器运行命令
docker run --name="testListen" -p 5555:5555 --env LISTEN_HOST="localhost" --env LISTEN_PORT="5555" docker.io/ayonnayihan/sample-sendr-rcv-test:receiver0.1
为发件人运行命令
docker run --name="testTalk" --env SEND_HOST="localhost" --env SEND_PORT="5555" docker.io/ayonnayihan/sample-sendr-rcv-test:sender0.1
在运行容器之前,我确保两个镜像都已构建。谁能告诉它为什么不能正常运行?
这是一个简单的 python 运行命令,在没有 docker 的情况下也可以正常工作:
在接收者python script.py localhost 5555
发件人python script.py localhost 5555
【问题讨论】:
-
localhost是容器,而不是您的主机。你只是想让容器互相交谈吗?如果是这样,请查看 Docker 网络。
标签: python docker dockerfile