gpt4 book ai didi

mysql - Docker 镜像无法在 Live 上构建,但在 Dev 上正常

转载 作者:可可西里 更新时间:2023-11-01 07:55:24 25 4
gpt4 key购买 nike

我对 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.7 的图像 python,但是根据 Python readme on Docker Hub,此标签是一个“共享” 标签这在其他时间发生了变化:现在 python:2.7 与 Python python:2.7.16python:2 共享,但以前可能是与 python:2.7.15python:2.7.14 等共享(换句话说,python:2.7python 之后:2.7.x 升级时)

您的机器和实时服务器可能在不同的时间拉取图像,现在有一个不同的标记为 2.7 的图像。 “共享”标签看起来像 latest 标签,可能指向更新的图像,因为它们已发布。

你可以做什么:

  • 构建时强制拉取图像,即使图像已经存在(使用 docker build with --pull 选项
  • 改用文档化的Simple 标签,它们应该更加一致(例如python:2.7.16-alpine3.9)
  • 不要在发布过程中重新构建镜像,只构建一次并在本地和实时环境中使用相同的镜像(见下文)

编辑:这可以作为证据:

docker images --filter "reference=python" --digests --format "{{.Digest}} {{.Repository}}:{{.Tag}}"
sha256:7a61a96567a2b2ba5db636c83ffa18db584da4024fa5839665e330934cb6b2b2 python:2
sha256:7a61a96567a2b2ba5db636c83ffa18db584da4024fa5839665e330934cb6b2b2 python:2.7
sha256:7a61a96567a2b2ba5db636c83ffa18db584da4024fa5839665e330934cb6b2b2 python:2.7.16
sha256:39224960015b9c0fce12e08037692e8a4be2e940e73a36ed0c86332ce5ce325b python:2.7.15

精确到:

I thought the point of Docker is that everything runs using the same image and that you shouldn't run into issues like this.

Why is this the case and what can I do to fix it from here so that it runs the same on both dev and live?

是的,推荐的模式是一次构建镜像并在所有发布过程中使用相同的镜像 - 这确保您从开发到发布都拥有完全相同的上下文(包、代码等)生产。您不应在实时服务器上从头开始重新构建镜像,但最好在开发阶段构建它并使用相同的镜像进行测试和部署。

关于mysql - Docker 镜像无法在 Live 上构建,但在 Dev 上正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com