在docker上运行python程序

我是使用Docker和Python的新手,我想要一些帮助。 我正在尝试在Docker容器中运行一个Python程序。 这个程序需要定期运行,所以我的方法是在克隆和安装我的程序之后,把它作为一个cron工作来运行。 我创build了所有步骤的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 

“我创build了所有步骤的Docker文件,但它不工作”

不,您的Dockerfile缺lessCMD (或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-ishpath。

“这是我的Dockerfile”

你应该考虑使用官方的Python容器 ,而不是从头开始。 它更清楚地表明你正在使用Python 2.7,而且构build速度更快(因为它正在下载,而不是构build更多的东西)。

“我试图进入实例来运行应用程序,但它显示了我这个”

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