在docker上运行python程序

时间:2015-04-10 13:48:08

标签: python automation docker

我是使用Docker和Python的新手,我想要一些帮助。我正在尝试在Docker容器中运行Python程序。这个程序需要定期运行,所以在克隆和安装我的程序之后,我的方法是将它作为一个cron作业运行。我用所有步骤创建了Dockerfile,但它不起作用。我尝试输入容器来运行应用程序,但它显示了这个错误:

root@84592d72d4f0:/bsnap/bsnap# bsnap
Traceback (most recent call last):
  File "/usr/local/bin/bsnap", line 9, in <module>
    load_entry_point('bsnap==1.1', 'console_scripts', 'bsnap')()
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 522, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2647, in load_entry_point
    return ep.load()
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2320, in load
    return self.resolve()
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2326, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "build/bdist.linux-x86_64/egg/bsnap/app.py", line 27, in <module>
  File "build/bdist.linux-x86_64/egg/bsnap/log.py", line 33, in <module>
  File "/usr/local/lib/python2.7/logging/handlers.py", line 760, in __init__
    self._connect_unixsocket(address)
  File "/usr/local/lib/python2.7/logging/handlers.py", line 788, in _connect_unixsocket
    self.socket.connect(address)
  File "/usr/local/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 2] No such file or directory

这是我的Dockerfile:

FROM ubuntu:14.04

MAINTAINER Dave J. Franco 

RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list

RUN apt-get update && apt-get upgrade -y

#Install container essentials
RUN apt-get install -y tar \
                   git \
                   curl \
                   nano \
                   wget \
                   dialog \
                   net-tools \
                   build-essential
# Install pip's dependency: setuptools:
RUN apt-get install -y python python-dev python-distribute python-pip

#git clone project
RUN git clone https://github.com/davejfranco/bsnap.git

#ADD the bsnap configuration file
ADD bsnap.conf /bsnap/bsnap/bsnap.conf

WORKDIR /bsnap

#Install bsnap
RUN python setup.py install

#Add an entry on crontab to execute the script every week 
RUN echo "30 16 09 04 * root /usr/local/bin/bsnap" >> /etc/crontab

1 个答案:

答案 0 :(得分:1)

  

“我使用所有步骤创建了Docker文件,但它无法正常工作”

不,您的Dockerfile缺少CMD(或ENTRYPOINT)指令,因此Docker在启动容器时不知道要运行什么。

你可以运行一个什么都不做的命令,然后等待cron做它的事情。或者您可以自己编写一个cron脚本:

#!/bin/bash
mins=0
while true; do
 if [ $mins -lt 10080 ]; then
    sleep 60
    mins=$[mins+1]
 else
    /bsnap/bsnap/bsnap
    mins=0
 fi
done

您可以让您的Dockerfile说CMD /bsnap/bsnap/bsnap,然后在主机计算机中使用cron每周运行容器。我就是这样做的,我相信这是Docker-ish最多的道路。

  

“这是我的Dockerfile”

您应该考虑使用the official Python container,而不是从头开始。它更清楚你使用Python 2.7并且它构建得更快(因为它正在下载,而不是构建更多的东西)。

  

“我尝试在实例中输入以运行应用程序,但它向我显示了这个”

这是错误的来源(GitHib link)。 Bsnap期望/dev/log存在,但它不在Docker容器上。如果它确实存在于您的主机上并且您想要使用它,则可以传递-v /dev/log:/dev/log以在容器内公开它。否则,您可能需要编辑bsnap代码以删除以这种方式记录的尝试。