我用一个简单的python3.6容器构建了一个docker-compose,该容器暴露了端口5000。该容器运行python服务器端脚本,等待客户端连接。这些是文件:
Dockerfile:
FROM python:3.6-alpine
WORKDIR /app
CMD ["python","serveur.py"]
Docker-compose:
version: '2'
services:
serveur:
build:
context: .
dockerfile: Serveur
ports:
- "127.0.0.1:5000:5000"
volumes:
- "./app:/app"
serveur.py:
#!/usr/bin/python3
import socket
import threading
print("debut du programme")
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "0.0.0.0"
port = 5000
socket.bind((host, port))
socket.listen(5)
for i in range(2):
print("ready to connect")
a,b = socket.accept()
print("Client connected")
socket.close()
这里是问题:
-如果我运行docker compose,则客户端无法在服务器上连接;代码似乎被阻塞了,此外,Docker日志中没有任何显示内容。如果我退出socket.accept(),一个客户端可以连接,并且我在日志中看到所有打印。如果我从代码中删除循环,而只是对齐多个socket.accept(),那么代码块就可以了。
我知道问题出在我的Docker设置上,因为如果我在Docker之外运行此脚本,那么serveur.py可以完美运行。
谢谢你们的时间。
答案 0 :(得分:0)
事实证明,docker日志被延迟到python程序停止为止。所以我没看过照片,因为程序永远不会停止。解决方案是 将此env变量放入docker-compose文件中:
version: '2'
services:
serveur:
build:
context: .
dockerfile: Serveur
environment:
- "PYTHONUNBUFFERED=1"
ports:
- "127.0.0.1:5000:5000"
volumes:
- "./app:/app"
所以现在我可以看到确认连接的打印纸。