python - Docker容器运行后存在且日志中没有错误

标签 python azure docker docker-container azure-dsvm

我有一个 python 应用程序,由图像分析模型和 2 个脚本文件组成。在 Main.py 中,我有 XMLRPC 服务器来运行并永远监听客户端。

if __name__ == "__main__":
    server = SimpleXMLRPCServer(("0.0.0.0", 8888))
    print("Listening on port 8888...")
    server.register_function(result, "result")
    server.serve_forever()

我的 Dcokerfile 是:

# Start with NVIDIA's CUDA and cuDNN base image.
FROM nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04

# Argument: the username & password.
ARG username
ARG user_password

# Update the system.
RUN echo "debconf debconf/frontend select Noninteractive" | debconf-set-selections
RUN apt-get update
RUN apt-get upgrade --assume-yes

...... bla bla bla

WORKDIR /home/${username}

# Copy the current directory contents into the container at /home/${username}
ADD . /home/${username}

...... bla bla bla

# Expose the ports and start the ssh daemon as entry point.
USER root
EXPOSE 22 6006 8888
ENTRYPOINT ["/usr/sbin/sshd", "-D"]

当我添加 CMD 来运行我的 Main.py 时,容器不起作用,它立即退出。 我能够运行此容器的最佳实践是什么?我正在使用适用于 Linux Ubuntu 的 azure 数据科学虚拟机。

我构建了我的 Dockerfile:

 docker build . --tag img_processing:V1 --build-arg "username=blabla" --build-arg "user_password=blabla"

我运行我的容器:

docker run -d -p 4000:8888 img_processing

目前我使用docker exec -it my-app-container bash在我的容器内部,我管理东西并运行 python Main.py &在后台运行脚本,我认为这不是一个好方法。 特别是我必须找到同时放大和处理 3000 张图像的方法。因此每个容器需要具有相同的设置。

有什么想法吗?

最佳答案

首先,切勿公开端口 22 并在容器内运行 SSH。这不是推荐的做法

接下来您可以将 ENTRYPOINT 或 CMD 指定为

CMD ["python", "Main.py"]

为此,您需要确保 Main.py 位于您指定的 WORKDIR 的当前目录

只有当您希望将传递给容器运行命令的参数附加到 ENTRYPOINT 命令时,您才会使用 ENTRYPOINT。在你的情况下 CMD 应该可以。

当您的包含立即退出时,您应该删除 -d 标志并使用 -it 标志来调试问题

docker run -it -p 4000:8888 img_processing

关于python - Docker容器运行后存在且日志中没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508066/

相关文章:

macos - 构建并推送多拱 docker 镜像

python - kwargs.copy() 的插入顺序现在也应该被认为是有保证的吗? (发布 Python 3.6)

python - 'NoneType' 对象在 Beautiful Soup 4 中不可调用

java - 如何更改 Azure Functions 中的日志级别

azure - 如何使用 terraform 使 azure 子网安装可重入?

amazon-web-services - Docker ECS 插件 AWS 上下文未设置 docker ecs 设置

python - 使用 Django 和 Celery 的动态页面

python - 编号的计算满足条件的行(来自 csv 的数据)和较慢的代码

Azure API 网关 - 将 JWT token 发送到后端

docker - 从 Google Cloud Container Registry 中提取 Docker 镜像时权限被拒绝