我对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的要点是,一切都使用相同的映像运行, 你不应该遇到这样的问题。
为什么会这样,我该怎么做才能从这里修复它,以便它可以运行 开发人员和现场人员都一样吗?
答案 0 :(得分:4)
您正在使用带有标签python
的图像2.7
,但是根据Python readme on Docker Hub,此标签是“ shared” 标签,该标签在其他时间更改:对现在python:2.7
已与Python python:2.7.16
和python:2
共享,但以前可能已与python:2.7.15
,python: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软件包