从rhel6.5图像构建docker镜像

时间:2015-05-06 15:01:00

标签: python docker

我正在尝试构建一个基于python3的容器并安装一些要求。但是python3的构建失败了 这是我的Dockerfile

FROM rhel6.5
ADD ./* /app/
WORKDIR /app/Python
CMD ["./configure"]
CMD ["make"]
CMD ["altinstall"]
WORKDIR /app
CMD ["python", "-m", "pip",  "install" , "-r" , "requirement.txt"]

运行后构建

sudo docker run myimage python -v给出2.6 什么时候,我运行bash并尝试再次编译python

sudo docker run -i myimage /bin/bash
./configure

我得到了

./configure
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... linux
checking for --without-gcc... no
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/app':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

最后

yum install gcc

也失败了

Loaded plugins: product-id, subscription-manager
Setting up Install Process
No package gcc available.
Error: Nothing to do

4 个答案:

答案 0 :(得分:1)

你正在使用RHEL图像; Red Hat Enterprise Linux是一种商业产品,需要付费订阅才能访问更新。除非使用subscription-manager attach配置某些子目录,否则不会配置任何存储库。

如果您目前不是RHEL的付费客户而且您没有令人信服的理由要求RHEL,那么您可以使用CentOS实际访问相同的软件包。

另请注意,当前fedoraubuntu图像都有Python 3可用(作为Fedora的可安装程序包,默认情况下包含在Ubuntu中)。

答案 1 :(得分:1)

您的Dockerfile错了。您使用CMD代替RUN。请参阅有关Dockerfile的参考文档:https://docs.docker.com/reference/builder/

  

CMD的主要目的是为执行容器提供默认值。

当构建时,CMD中没有任何内容被执行;它只是元数据,只有最后一个是从图像运行容器时执行的选择。

如果使用以下内容,docker将无法构建(但有充分理由)。

FROM rhel6.5
ADD ./* /app/
WORKDIR /app/Python
RUN ./configure
RUN make
RUR altinstall
WORKDIR /app
RUN python -m pip install -r requirement.txt

您可能希望添加一个步骤来安装编译器和所需的依赖项,以便能够在您的rhel中构建python。但我会遵循@larsks和@Adrian Mouat的建议。

答案 2 :(得分:1)

构建python肯定有更多步骤,这里是我最近用于Python 2.7.9的步骤(我确信它很容易适应3.4):

  • sudo yum groupinstall“开发工具”
  • sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
  • curl https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz -o~ / Python-2.7.9.tgz
  • tar -xvf Python-2.7.9.tgz
  • cd Python-2.7.9
  • ./ configure --prefix = / usr / local --enable-unicode = ucs4 --enable-shared LDFLAGS =“ - Wl,-rpath / usr / local / lib”
  • sudo vi /etc/ld.so.conf
  • 在新行上添加/ usr / local / lib并保存。
  • sudo / sbin / ldconfig
  • 使
  • sudo make altinstall
  • 删除Python-2.7.9文件夹和Python-2.7.9.tgz存档

因为你写的是Dockerfile,你应该:

  • 使用yum install -y安装依赖项
  • 由于你是altinstalling,python解释器在/usr/local/bin/python2.7或python3.4中可用,具体取决于你要安装的版本。
  • make altinstall而不是make install的全部目的是确保您不会破坏python可执行文件的系统依赖性。

答案 3 :(得分:0)

深受@ Teodore的回应和https://registry.hub.docker.com/u/danzilla/centos6-python3-django/dockerfile/

的启发

并添加

ADD ./* /app/
RUN pip3.4 install -r /app/requirement.txt 

在文件和。需求是我项目所需的全部要求。

sudo docker run python3-redhat /usr/local/bin/python3.4 -c "import dja
ngo; print(django.get_version())"

按预期给出1.8.1。