问题描述:Win10家庭版系统,使用docker desktop,基于centos:latest版本创建镜像时报错。
PS C:\Users\cong\Desktop> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 8 months ago 231MB
我的centos镜像是直接pull的默认latest版本,应该是centos:8。
在桌面的mydocker文件夹中创建一个centos_dockerfile.txt文件:
FROM centos:latest
MAINTAINER zcong <[email protected]>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
根据dockerfile文件自定义centos:8镜像,要求:
1.默认登陆路径为/usr
2.可以使用vim命令(需要另外安装的第三方包)
运行代码:
PS C:\Users\cong\Desktop\mydocker> docker build -f ./centos_dockerfile.txt -t centos:latest
报错:
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
百度了下原因,是因为centos:8版本更新后没有了appstream,镜像源出现点问题。
我找到的所有办法都需要在Linux系统下操作/etc/yum.repos.d
这个文件夹,然而我的电脑是win10系统,根本没有这个文件夹!
思考了一下,dockerfile文件的那几行命令,其实就是以centos:8
为父镜像,创建一个可以使用vim
命令的新镜像,创建过程执行RUN yum install -y vim
下载对应的包。上一步骤就是在这一命令处报错,告诉我centos:8
找不到urls
。
好吧,那我就照着当前latest版本的centos镜像,搞一个有urls
的centos:8
出来。
网上已经有很多解决方法,这里采用https://blog.csdn.net/xiaocao_debug/article/details/123041407的方法将yum设置为阿里云的镜像源。
基于centos创建一个容器c1:
PS C:\Users\cong\Desktop\mydocker> docker run -it --name=c1 centos:latest /bin/bash
进入到c1容器中,找到并/etc/yum.repos.d
文件夹:
[root@1eae32974792 /] cd /etc/yum.repos.d
创建文件备份:
[root@1eae32974792 yum.repos.d] mkdir backup
[root@1eae32974792 yum.repos.d] mv *repo backup/
[root@1eae32974792 yum.repos.d] ls -lh
total 4.0K
drwxr-xr-x 2 root root 4.0K May 16 05:40 backup
下载阿里云文件:
[root@1eae32974792 yum.repos.d] curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2600 100 2600 0 0 2610 0 --:--:-- --:--:-- --:--:-- 2607
[root@1eae32974792 yum.repos.d]# ls -lh
total 8.0K
-rw-r--r-- 1 root root 2.6K May 16 05:41 CentOS-Base.repo
drwxr-xr-x 2 root root 4.0K May 16 05:40 backup
更新源里面的地址:
[root@1eae32974792 yum.repos.d] sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
[root@1eae32974792 yum.repos.d] sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*
生成缓存:
[root@1eae32974792 yum.repos.d] yum clean all
[root@1eae32974792 yum.repos.d] yum makecache
至此构建了一个更新了yum阿里源的容器c1,下面将容器c1转换为镜像mycentos:8
:
PS C:\Users\cong\Desktop> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1eae32974792 centos:latest "/bin/bash" 5 hours ago Up 8 minutes c1
PS C:\Users\cong\Desktop> docker commit 1eae32974792 mycentos:8
sha256:1a595a092da8e52a1a44141c972c11490997279dc9d3dae2860a1a42663ce016
PS C:\Users\cong\Desktop> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 8 1a595a092da8 7 seconds ago 317MB
centos latest 5d0da3dc9764 8 months ago 231MB
基于新创建的镜像mycentos:8
,修改dockerfile.txt
文件并根据该文件自定义镜像zc_centos:1.0
:
FROM mycentos:8
MAINTAINER zcong <[email protected]>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
PS C:\Users\cong\Desktop\mydocker> docker build -f ./centos_dockerfile.txt -t zc_centos:1.0
看一下镜像是否成功创建:
PS C:\Users\cong\Desktop\mydocker> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zc_centos 1.0 3eec5f13e8be 44 seconds ago 402MB
mycentos 8 1a595a092da8 14 minutes ago 317MB
centos latest 5d0da3dc9764 8 months ago 231MB
根据新创建的zc_centos:1.0
镜像创建容器zc_c1
:
PS C:\Users\cong\Desktop\mydocker> docker run -it --name=zc_c1 zc_centos:1.0
进入容器zc_c1
,验证能否使用vim
命令:
[root@86d20d7fd932 usr] cd ~
[root@86d20d7fd932 ~] vim a.txt
成功进入vim
编辑界面。