完整报错:ERROR: failed to solve: process "/bin/bash -c apt-get update && apt-get upgrade -y && apt-get install -y net-tools iputils-ping dnsutils libssl-dev ros-${ROS_DISTRO}-desktop ros-${ROS_DISTRO}-rmw-cyclonedds-cpp --no-install-recommends && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100。
重复build了好几次,都是报这个错误,考虑镜像源问题,估计是apt-get这个命令的问题。
修改方式:在dockerfile文件中,考虑在运行apt-get命令之前,插入以下命令:
RUN sed -i 's@http://archive.ubuntu.com/@http://mirrors.tuna.tsinghua.edu.cn/@g' /etc/apt/sources.list \
&& sed -i 's@http://security.ubuntu.com/@http://mirrors.tuna.tsinghua.edu.cn/@g' /etc/apt/sources.list
&& sed -i 's#http://ports.ubuntu.com/ubuntu-ports/#http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/#g' /etc/apt/sources.list
此外还遇到了另外一种情况 :
就是上面的修改完毕后,清除缓存再运行,发现换源这里的执行时间为0.0s。
感觉镜像源可能没有写入/etc/apt/sources.list,于是我在dockerfile里面增加了这一行:
RUN cat /etc/apt/sources.list
然后运行dockerbuild,加上--progress=plain为了输出更细致一点
docker build --rm --progress=plain --no-cache -f $BUILD_CONTEXTS -t $DOCKERHUB_USERNAME/ros:rolling-$ARCH .
之后,输出如下 :
从输出中可以看到 /etc/apt/sources.list
文件的内容,其中提到了 Ubuntu sources 已经移动到了 /etc/apt/sources.list.d/ubuntu.sources
文件。
修改方式2:就是把后面的文件地址改了
RUN sed -i 's@http://archive.ubuntu.com/@http://mirrors.tuna.tsinghua.edu.cn/@g' /etc/apt/sources.list.d/ubuntu.sources \
&& sed -i 's@http://security.ubuntu.com/@http://mirrors.tuna.tsinghua.edu.cn/@g' /etc/apt/sources.list.d/ubuntu.sources\
&& sed -i 's#http://ports.ubuntu.com/ubuntu-ports/#http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/#g' /etc/apt/sources.list.d/ubuntu.sources
(不管上面什么情况)最后运行过程如下:
1. 清除缓存
docker builder prune
2. 运行docker build即可(博主自己构建了一个循环build的脚本文件,其实大差不差)
最后结果如下:镜像构建成功!