我是使用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
答案 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代码以删除以这种方式记录的尝试。