首页 > 解决方案 > 如何使用 ubuntu 18.04(仿生)构建 docker python 容器?

问题描述

Python 提供了 docker 镜像(https://hub.docker.com/ /python/),有多种风格(基于来自https://hub.docker.com/ /buildpack-deps/的不同镜像) . 不幸的是,没有一个以 ubuntu 18.04(仿生)作为基础。我想建立它。

我最初认为我应该从一个“真正的”ubuntu 18.04 docker 映像(https://hub.docker.com/r/library/ubuntu/)开始并安装相关的 ubuntu 包,但生成的 docker 映像似乎得到了很快就很大了,当然不会引入当前的 python 版本(3.7.0)。

接下来,我尝试简单地构建 docker hub 上提供的确切 Dockerfile(https://github.com/docker-library/python/blob/8601079d1f70b03c01408377716a3243ce75cec9/3.7/stretch/Dockerfile),但FROM buildpack-deps:stretchFROM buildpack-deps:bionic. 不幸的是,构建似乎需要对我的区域进行某种交互式选择,我不知道如何解决这个问题(下面的输出)。

有关如何预配置此构建的任何建议,因此它不会询问我的区域/如何禁用该提示?

我看到了使用的建议expect,但不知道是否可以轻松地将其集成到 docker 构建中。

Docker 构建输出

[...]
Setting up tzdata (2018d-1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
  2. America     5. Arctic     8. Europe    11. SystemV
  3. Antarctica  6. Asia       9. Indian    12. US
Geographic area:

PS:使用原始图像构建 docker 图像FROM buildpack-deps:stretch似乎可以正常工作,因此此交互式选择与仿生基础有关。

标签: pythondockertzdata

解决方案


这是我从Ubuntu Stretch开始必须做的事情,我改变了:

FROM ubuntu

为了通过 tzdata 提示,请在 apt-get 行之前插入环境变量(编辑使用 ARG 而不是 ENV,使其仅适用于 docker 构建,而不适用于容器运行时):

ARG DEBIAN_FRONTEND=noninteractive

然后你需要 apt-get 所有这些包:

RUN apt-get update && apt-get install -y --no-install-recommends \
wget gpg dirmngr gpg-agent build-essential checkinstall tk-dev \
libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev \
libgdbm-dev libc6-dev libbz2-dev

我还需要在所有调用中添加该--no-check-certificate选项。wget


推荐阅读