命令`source`在Dockerfile中不起作用

时间:2018-01-05 08:20:54

标签: bash docker sh

我想构建我的图像,这是我的Dockerfile:

FROM ubuntu:16.04

MAINTAINER 'hulei886@aliyun.com'

ENV PHANTOMJS_VERSION 2.1.1 
ENV PYTHON_VERSION 3.6.3

# install python3.6.3
RUN apt-get update \
 && apt-get install -y build-essential \
                       git \
                       curl \
                       libssl-dev \ 
                       zlib1g-dev \
                       libncurses5-dev \
                       libncursesw5-dev \
                       libreadline-dev \
                       libsqlite3-dev \

 && apt-get install -y libgdbm-dev \
                       libdb5.3-dev \
                       libbz2-dev \
                       libexpat1-dev \
                       liblzma-dev \ 
                       tk-dev \

 && cd ~ \

 && git clone https://github.com/pyenv/pyenv.git .pyenv \
 && echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc \
 && echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc \
 && echo 'eval "$(pyenv init -)"' >> ~/.bashrc \
 && source ~/.bashrc \

 && curl -L https://raw.githubusercontent.com/yyuu/pyenv- installer/master/bin/pyenv-installer | bash \

 && pyenv install PYTHON_VERSION \

 && pyenv global PYTHON_VERSION \
 && cd .. \
 CMD [python]

但是当我运行“docker build。-t [mytag]”时, git clone命令没有克隆任何东西,这里是截图: enter image description here

我需要帮助解决这个问题,谢谢!

2 个答案:

答案 0 :(得分:2)

错误信息非常清楚:

/bin/sh: 1: source: not found

git clonesource外壳中/bin/sh没问题。您需要改为使用.(点)命令。

编写Dockerfile时,最好使用/bin/sh shell测试容器中的命令。

在您的情况下,在source错误之后,还有其他错误:

  • 卷曲网址中的空格
  • 使用错误的env变量:缺少$前缀
  • 无用cd ~:从结果图片运行容器时,只有WORKDIR instruction才会更改当前目录
  • CMD指令错误地插入RUN指令

固定版本为:

[...]
  && git clone https://github.com/pyenv/pyenv.git .pyenv \
  && echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc \
  && echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc \
  && echo 'eval "$(pyenv init -)"' >> ~/.bashrc \
  && . ~/.bashrc \

  && curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash \

  && pyenv install $PYTHON_VERSION \
  && pyenv global $PYTHON_VERSION

WORKDIR /root
CMD [python]

答案 1 :(得分:0)

你必须在bash中使用source替代品。你可以做点什么

  

。 somefile

而不是

  

source somefile