在SLES中创建自定义Docker镜像的方法

46次阅读
没有评论

问题描述

在尝试使用Docker化的SLES(SuSe Linux Enterprise)时,遇到了问题。虽然他尝试从官方的基础镜像构建,但似乎不能直接工作。他想知道构建自定义镜像的步骤。

以下是他的Dockerfile内容:

FROM suse/sles12:latest
RUN zypper ref -s
RUN zypper --gpg-auto-import-keys ref -s

在构建过程中出现以下问题:

Sending build context to Docker daemon  3.584kB
Step 1/3 : FROM suse/sles12:latest ---> d0f7e807658b
Step 2/3 : RUN zypper ref -s ---> Running in 235316f5bbe1
Refreshing service 'container-suseconnect'.
Problem retrieving the repository index file for service 'container-suseconnect':
[container-suseconnect|file:/usr/lib/zypp/plugins/services/container-suseconnect]
Warning: Skipping service 'container-suseconnect' because of the above error.
All services have been refreshed.
Warning: There are no enabled repositories defined.
Use 'zypper addrepo' or 'zypper modifyrepo' commands to add or enable repositories.

解决方案

以下解决方案基于提供的问答数据,对于操作系统和Docker的版本,以及Docker镜像的细节可能会有一些差异,建议在操作前备份重要数据。

方案1:添加或启用仓库

根据错误消息,问题似乎是因为缺少仓库或仓库未启用造成的。你可以在Dockerfile中使用zypper addrepozypper modifyrepo命令来添加或启用仓库。以下是解决方案的步骤:

  1. 创建一个Dockerfile,内容如下:
FROM suse/sles12:latest
RUN zypper addrepo --check --refresh --name 'SLES12-Pool' http://download.suse.de/ibs/SUSE:/SLE-12:/GA/standard/sle-12-x86_64/ sles-pool
RUN zypper addrepo --check --refresh --name 'SLES12-Updates' http://download.suse.de/ibs/SUSE:/SLE-12:/GA/standard/sle-12-x86_64/ sles-updates
RUN zypper ref -s
RUN zypper --gpg-auto-import-keys ref -s
  1. 在Dockerfile所在的目录中打开终端,并执行以下命令构建镜像:
docker build -t custom_sles_image .

请确保在Dockerfile所在目录中,custom_sles_image是你为镜像取的名字。

方案2:手动安装并提交容器

另一种方法是在容器内手动安装所需的软件包,然后将容器提交为一个新的镜像。以下是解决方案的步骤:

  1. 启动一个SLES容器并进入其Shell环境:
docker run -it --name temp_sles_container suse/sles12 bash
  1. 在容器内使用zypper命令安装所需的软件包,比如:
zypper install your_package_name
  1. 退出容器的Shell环境并停止容器:
exit
docker stop temp_sles_container
  1. 提交容器为新的镜像:
docker commit temp_sles_container custom_sles_image

其中,custom_sles_image是你为镜像取的名字。

方案3:使用docker run进行测试

在Dockerfile之外,你可以使用docker run命令测试与构建镜像中相同的命令。例如:

docker run -it suse/sles12 bash -c "zypper -n ref -s"

这将在容器中运行与Dockerfile中相同的zypper命令,以便更好地模拟构建过程。

无论选择哪种方法,请确保在操作前阅读官方文档以及特定版本的操作细节,以便获得最佳结果。

结论

通过在Dockerfile中添加或启用仓库,手动安装软件包并提交容器,或使用docker run进行测试,你应该能够解决在构建自定义SLES Docker镜像时遇到的问题。在执行操作之前,请务必备份数据并查阅相关的官方文档,以确保你的操作正确无误。

正文完