use*_*872 5 python setup.py docker
这样做时我得到了这个错误 sudo docker build .
> (3:58:02 PM) njain: tep 28 : RUN python /tmp/setup.py install &&
> python /tmp/buzz/scripts/setuprabbit.py ---> Running in e7afcbda3c75
> Traceback (most recent call last): File "/tmp/setup.py", line 7, in
> <module>
> long_description=open('README.md', 'r').read(), IOError: [Errno 2] No such file or directory: 'README.md' 2014/10/15 15:40:14 The command
> [/bin/sh -c python /tmp/setup.py install && python
> /tmp/buzz/scripts/setuprabbit.py] returned a non-zero code
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile看起来像这样:
ADD buzz /tmp/
# DOCKER-VERSION 0.3.4
#bunch of installs
RUN cd /tmp/
RUN python /tmp/setup.py install && python /tmp/buzz/scripts/setuprabbit.py
Run Code Online (Sandbox Code Playgroud)
当我进入容器(交互式shell和CD到/ tmp /)时,我能够做到python setup.py install没有任何问题.
Mac*_*Mac 13
Arthur的答案正确地确定了问题的原因,并提供了有效的解决方案.
但是,Docker的"编写Dockerfiles的最佳实践"建议不要使用他建议的模式(即RUN cd /some/path && do-some-command),而是建议使用该WORKDIR指令(旨在解决这个确切的用例).
WORKDIR基本上与您希望cd命令工作的方式完全一致:它更改工作目录,并保留新的工作目录以供Dockerfile中的后续指令使用.
在您的情况下,生成的Dockerfile将如下所示:
ADD buzz /tmp/
# DOCKER-VERSION 0.3.4
#bunch of installs
WORKDIR /tmp/
RUN python /tmp/setup.py install && python /tmp/buzz/scripts/setuprabbit.py
Run Code Online (Sandbox Code Playgroud)
Art*_*ldt 11
docker文件中的每一步:
所以你的docker文件说:
ADD buzz /tmp/ # change the container to have this new file
# DOCKER-VERSION 0.3.4
#bunch of installs
RUN cd /tmp/ # don't change the container at all and then save the results
RUN python /tmp/setup.py install && python /tmp/buzz/scripts/setuprabbit.py ## do the install
Run Code Online (Sandbox Code Playgroud)
所以cd第二行到最后一行的命令什么也不做,并且不影响它之后的行.这是一个令人遗憾的副作用,使得docker文件看起来太像shell脚本,而不是它们.而是将cd命令放在需要使用它的同一行上,这样它的效果将继续沿着该行传递,而不是同一个Dockerfile中的其他RUN命令
RUN cd /tmp/ && python /tmp/setup.py install && python /tmp/buzz/scripts/setuprabbit.py
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7797 次 |
| 最近记录: |