Docker镜像无法在Live上构建,但可以在Dev上正常运行

时间:2019-07-19 11:52:23

标签: mysql docker dockerfile

我对Docker有一个奇怪的问题。

这是有问题的Dockerfile。

FROM python:2.7

RUN apt-get update && apt-get install -y \
    build-essential \
    python-lxml \
    python-dev \
    python-pip \
    python-cffi \
    libcairo2 \
    libpango1.0-0 \
    libpangocairo-1.0.0 \
    libxml2-dev \
    libxslt1-dev \
    zlib1g-dev \
    libpq-dev \
    libjpeg-dev \
    libgdk-pixbuf2.0-0 \
    libffi-dev \
    mysql-client \
    shared-mime-info

# ... further docker file rules, which doesn't get run cause apt-get fails

我遇到的问题是,在我的开发机器上,这个Dockerfile构建了 完全可以,但是在我们的实时服务器上,它突然出现故障(在 过去),与E: Package 'mysql-client' has no installation candidate

我认为Docker的要点是,一切都使用相同的映像运行, 你不应该遇到这样的问题。

为什么会这样,我该怎么做才能从这里修复它,以便它可以运行 开发人员和现场人员都一样吗?

2 个答案:

答案 0 :(得分:4)

您正在使用带有标签python的图像2.7,但是根据Python readme on Docker Hub,此标签是“ shared” 标签,该标签在其他时间更改:对现在python:2.7已与Python python:2.7.16python:2共享,但以前可能已与python:2.7.15python:2.7.14等共享(换句话说,{{1} }紧随python:2.7进行升级)

您的计算机和实时服务器可能在不同的时间提取了图像,现在标记了python:2.7.x的图像也有所不同。 “共享”标签似乎类似于2.7标签,并且在发布时可能指向较新的图像。

您可以做什么:

  • 即使在已有图像的情况下,在构建时也要进行图像拉动(使用docker build with --pull选项
  • 使用已记录的简单标记,这些标记应该更加一致(例如latest
  • 请勿在发布过程中重新生成映像,仅生成一次并在本地和实时环境中使用同一映像(请参见下文)

编辑:可以使用以下证据:

python:2.7.16-alpine3.9

要精确:

  

我认为Docker的要点是一切都使用相同的方式运行   图片,并且您不应该遇到这样的问题。

     

为什么会这样,我该怎么做才能从这里修复它,以使其在dev和live上都可以运行?

是的,推荐的模式是一次构建映像,并在整个发行过程中使用同一映像-这样可确保您从开发到开发过程都具有完全相同的上下文(包,代码等)生产。您不应该在实时服务器上从头开始重建映像,而是理想地在开发阶段将其生成,并使用相同的映像进行测试和部署。

答案 1 :(得分:2)

Python:2.7现在基于Debian Buster。没有被视为https://packages.debian.org/search?keywords=mysql-client

的mysql-client apt软件包