在Docker for Mac和Docker CE for Ubuntu上构建镜像的差异

54次阅读
没有评论

问题描述

在使用Docker时遇到了一个问题,他在Docker for Mac上可以成功构建镜像,但在他的Linux机器上使用Docker CE for Ubuntu时却失败了。他的Dockerfile如下:

FROM php:5-fpm
RUN apt-get update
RUN apt-get install -y php5-mysql
RUN apt-get install -y php5-xdebug
RUN apt-get install -y php5-mcrypt
RUN apt-get install -y php5-gd

在Mac上一切正常,但在Linux机器上,他遇到了以下错误信息:

E: Package 'php5-mysql' has no installation candidate
The command '/bin/sh -c apt-get install -y php5-mysql' returned a non-zero code: 100

他想知道为什么在两个环境下表现不一致。

解决方案

请注意以下操作可能涉及版本差异,确保备份数据。
根据用户提供的信息,问题可能出现在Docker镜像的基础镜像上。不同的主机上使用的php:5-fpm镜像版本可能不同,因此导致了环境的不一致性。以下是解决这个问题的一些步骤:

1. 更新基础镜像

首先,用户可以尝试在Linux主机上更新基础镜像,以确保与Mac主机上使用的镜像版本相同。在Linux主机上运行以下命令来更新镜像:

docker pull php:5-fpm

这将从Docker Hub拉取最新的php:5-fpm镜像,确保两个主机上的基础镜像相同。

2. 更新Dockerfile

用户还可以在Dockerfile中使用特定版本的基础镜像,以确保在不同主机上构建时使用相同的基础环境。在Dockerfile中使用标签来指定基础镜像的版本,例如:

FROM php:5-fpm
# 其他指令...

在这种情况下,用户应该选择一个适合他们需求的稳定版本,并确保在两个主机上都可以获得相同的版本。

3. 更新Dockerfile的apt-get命令

另一个潜在的问题是,Ubuntu发行版之间的软件包名称可能有所不同。用户在Dockerfile中使用的是php5-mysql,但在Linux主机上可能不存在这个软件包。用户可以尝试使用适用于当前Ubuntu版本的软件包名称。如果需要安装多个软件包,最好将它们合并为一个apt-get命令,以避免多次运行apt-get。

FROM php:5-fpm
RUN apt-get update
RUN apt-get install -y php5-mysql php5-xdebug php5-mcrypt php5-gd

通过以上步骤,用户应该能够在Docker for Mac和Docker CE for Ubuntu上获得一致的构建结果。他们可以根据自己的需求选择适当的解决方案,以确保镜像在不同环境中都能成功构建。

注意:为了保持环境的一致性,建议使用版本特定的基础镜像和软件包名称。这将有助于避免不同主机上的不一致性问题。

正文完