【问题标题】:How to properly run Python using Docker/Kubenertes?如何使用 Docker/Kubernetes 正确运行 Python?
【发布时间】:2019-08-12 18:02:15
【问题描述】:

我有一个简单的 python 代码,但我无法让它在 Docker 或 Kubernetes 上运行。

我正在构建、标记和推送我的图像,而不是运行

docker build -t test . --no-cache
docker tag test tcnl/test:0.2
docker push tcnl/test
docker run tcnl/test:0.2
#!/usr/bin/env python

# WS server example
print("Listening...")
import socket
print("Listening...")
import sys
print("Listening...")

s = socket.socket()
print("Listening...")
host = "0.0.0.0"
port = 8765
s.bind((host, port))
print("Listening...")
s.listen(5)
print("B4 while")
try:

    c, addr = s.accept()
    while True:
        print("INSIDE TRUE")
        print('Got connection from', addr)
        c.send(("Connection accepted!").encode('utf-8'))
        print(str(c.recv(4096).decode('utf-8')))
except:
    print("Oops!",sys.exc_info(),"occured.")
    input()
s.close()

它只是一个 websocket 服务器,等待连接然后发送消息。但即使这样也行不通... 现在我的 Dockerfile

FROM python:3.6
MAINTAINER tcnl

# Creating Application Source Code Directory
RUN mkdir -p /test/src

# Setting Home Directory for containers
WORKDIR /test/src

# Installing python dependencies
COPY ./requirements.txt /test/src/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Copying src code to Container
COPY ./test-server.py /test/src/test.py

# Application Environment variables
ENV APP_ENV development

# Exposing Ports
EXPOSE 8765

# Setting Persistent data
VOLUME ["/test-data"]

# Running Python Application
CMD python /test/src/test.py

当我在 docker 上运行时,程序甚至不打印。我做错了什么?

【问题讨论】:

    标签: python docker kubernetes


    【解决方案1】:

    只需运行docker run -it tcnl/test:0.2,它将 docker stdout 绑定到您的终端,您将看到输出:

    码头工人

    # docker run -it tcnl/test:0.2
    Listening...
    Listening...
    Listening...
    Listening...
    Listening...
    B4 while
    

    Kubernetes

    kubectl run -it test-server --restart=Never --image=tcnl/test:0.2

    获取输出: kubectl logs test-server

    Listening...
    Listening...
    Listening...
    Listening...
    Starting Flask...
    Listening...
    B4 while
    

    【讨论】:

    • 当我运行时: cat .\equipment.yaml |链接器注入 - | kubectl apply -f - ,然后 kubectl logs -f equipment-service -c equipment-container --namespace=linkerd-test 要将部署文件链接到 Linkerd,然后尝试从 POD 获取日志,它是空白的。你知道会发生什么吗?
    • 我不熟悉 linkerd 但显示来自kubectl get all的输出
    • 据我所知,Linkerd 并没有导致问题,我之前使用 Linkerd 运行过其他图像并且能够获取日志,但是使用这个 Python 脚本,我不能。
    • 您需要编辑您的问题以包括您正在运行的命令和 Kubernetes 清单,以便我们有一些信息可以进行调试。我们只能在没有更多信息的情况下推测。
    • 这是我的命令kubectl run -it test-server --restart=Never --image=tcnl/test:0.2,它正在运行 kubernetes 清单,如果您需要 yaml,只需运行 kubectl run -it test-server --restart=Never --image=tcnl/test:0.2 --dry-run -o yaml
    猜你喜欢
    • 2018-05-29
    • 2019-09-28
    • 1970-01-01
    • 2019-04-25
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多