由于用惯了CentOS且Ubuntu用得少,特记录一下创建Ubuntu镜像遇到的一些问题。

​apt依赖的问题

  1. The following packages have unmet dependencies: apt-utils : Depends: apt (= 2.0.9) but 2.4.8 is to be installed E: Unable to correct problems, you have held broken packages.

解决:指定depends需要的版本(括号内的版本全名). 注意:这里只是指定安装版本的方式,实际上会遇到接下来的错误2.

 # 指定版本apt-get install --reinstall apt=2.0.9 -y
  1. E: Packages were downgraded and -y was used without --allow-downgrades.

如果遇到上面错误1就直接指定版本安装,并不会顺利通过,而是会遇到这个错误2。去掉-y行不行呢?不行,build过程会因为遇到Do you want to continue? [Y/n] Abort.,没有手动确认继续则会中断,build需要全部自动完成。所以既要指定安装版本,又要避免downgrade安装的手动确认,处理办法是使用管道预输入y:

  #指定版本,同时避免downgrade错误、需要手动输入确认安装 两个问题echo y| apt-get install --reinstall apt=2.0.9

3.System has not been booted with systemd as init system (PID 1). Can‘t operate​

这种情况是没有在启动时将systemd作为init系统启动,init是linux系统的老式服务管理模块,要使用systemd需要init。 安装init和systemd后,docker启动时按 docker run -d *** image-name /usr/sbin/init启动即可。

4.Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: stat /usr/sbin/init: no such file or directory: unknown.

这里报错是多段,应从最末端排查(这里的问题是没有apt-get安装init包). 然后再排查RunC等问题。

如果确实需要在Ubuntu使用systemd而镜像没有自带,Dockerfile增加如下RUN部分即可:

RUN echo y|apt-get install --reinstall libsystemd0=245.4-4ubuntu3.19 \&& apt-get install --reinstall systemd -y \&& apt-get install init -y
## 运行容器时以 docker run -d *** image-name /usr/sbin/init 格式启动

Tips: 自带systemd的Ubuntu镜像:
https://hub.docker.com/r/jrei/systemd-ubuntu

Dockerfile示例如下

因为镜像自带源搜不到ca-certificate包,所以国内源sources.list使用了http的链接。(当然也可以安装离线包或先安装curl解决)

# A nginx image for study & dev
# 本镜像启动时需要映射一个目录到/data供读配置、写日志
# nginx默认启动用户为 www:www(uid:3999,gid:399)(如果宿主机需要对映射目录有相同权限,可建立同id用户)
FROM ubuntu:latest
LABEL authors="Charles@local.dev" website="www.local.dev"USER root
# WORKDIR /var/tmp/
# RUN apt-get install curl -y \
#     && curl -O http://archive.ubuntu.com/ubuntu/pool/main/c/ca-certificates/ca-certificates_20211016ubuntu0.20.04.1_all.deb \
#     && sudo dpkg -i ca-certificates_20211016ubuntu0.20.04.1_all.debENV DEBIAN_FRONTEND noninteractiveCOPY ./sources.list /etc/apt/
COPY ./nginx.service /usr/lib/systemd/system/RUN apt-get update \&& apt-get upgradeRUN echo y|apt-get install --reinstall apt=2.0.9 \&& apt-get install apt-utils -y \&& apt-get install apt-transport-https -y \&& apt-get install ca-certificates -y \&& apt-get install net-tools networkd-dispatcher -yRUN apt-get install dbus -y \&& echo y|apt-get install --reinstall libsystemd0=245.4-4ubuntu3.20 \&& apt-get install --reinstall systemd -y \&& apt-get install init -yRUN apt-get install vim -y \&& apt-get install tree -y \&& apt-get install curl -y \&& apt-get install nginx -y# 启动容器需要使用目录映射,需要基本的预设目录树如下, 并保证用户www有对应权限(d0755 & f0644)
# /data
# /data/etc/nginx
# /data/etc/certs
# /data/var/log/nginx
RUN groupadd www -g 399 \&& useradd www -u 3999 -g 399 \&& systemctl enable nginx.service \&& mv /etc/nginx /etc/nginx.bak \&& ln -s /data/etc/nginx /etc/nginx \&& ln -s /data/var/log/nginx /var/log/nginxEXPOSE 80/tcp 443/tcp
VOLUME ["/data"]
ENTRYPOINT [ "/bin/bash" ]
CMD [ "-c", "tail -f /dev/null" ]

基于docker官方Ubuntu镜像build和使用systemd的一些常见问题相关推荐

  1. 关于Docker官方CentOS镜像无法启动mysqld的总结

    很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动. 无法正常启动表现为两种情况: 1> 初始完数据库后,mysqld启动报错 2> syst ...

  2. docker无法连接mysql镜像_关于Docker官方CentOS镜像无法启动mysqld的总结

    很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动. 无法正常启动表现为两种情况: 1> 初始完数据库后,mysqld启动报错 2> syst ...

  3. 基于docker在Ubuntu上搭建TensorFlow-GPU计算环境

    这里转载一篇Docker安装TF GPU的版本 基于docker在Ubuntu上搭建TensorFlow-GPU计算环境 由于实验室的服务器有多人共享使用,而不同人的代码对应的keras和tensor ...

  4. 基于docker的ELK镜像构建

    title: 基于docker搭建ELK镜像构建 本文主要记录下以前搭建ELK的docker镜像过程,记录下docker基础使用,如何基于centos的基础镜像构建应用. 基础镜像 elkbase:v ...

  5. 使用docker安装ubuntu镜像

    使用docker安装ubuntu镜像 查找Ubuntu镜像 docker search ubuntu 安装Ubuntu镜像 docker pull ubuntu 查看docker镜像 docker i ...

  6. docker desktop ubuntu镜像_「Docker」 - 镜像仓库

    一.镜像仓库 将Docker镜像和Git进行对比,镜像仓库类似GitHub.GitLab等托管平台,Docker的镜像仓库托管的不是代码项目,而是镜像. Docker镜像仓库最大的作用是实现了Dock ...

  7. docker desktop ubuntu镜像_资深专家都知道的顶级 Docker 命令!

    开发人员一直在努力提高 Docker 的使用率和性能,命令也在不停变化.Docker 命令经常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最常用的命令列表并给出部分使用方法. 目前, ...

  8. docker desktop ubuntu镜像_原创 | Docker入门,看了不理解,假一赔命

    写在前面 这篇博客适合谁? 对于Docker并不了解,只是有一点模糊的感觉,觉得Docker可以当成虚拟机用之类的 只是下载了Docker软件,对于怎么配置,怎么玩,第一步干什么,完全一无所知 其二, ...

  9. Docker学习 - Ubuntu镜像启动使用(换阿里镜像源)

      Ubuntu系统 阿里云镜像源官方配置: https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11PKz ...

最新文章

  1. 掌握XML系列(四)---创建格式良好的XML文档
  2. 服务器系统内存,服务器系统内存使用情况
  3. ubuntu下无法在根目录创建文件夹;permission denied 权限不足问题解决方法
  4. django框架 day08
  5. Data too long for column ‘blobtext‘ at row 1 问题解决
  6. r语言t检验输出检验统计量_如何进行统计分析
  7. Mac 显示和隐藏文件
  8. [Qt] 使用LZMA SDK完成C++的7z格式文件压缩和解压缩
  9. 360wifi驱动linux驱动安装,ubuntu安装360随身wifi驱动
  10. javascript中的交互效果
  11. 计算机存储单位:bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB
  12. 大数据学习——克隆虚拟机
  13. C语言 neutralize函数,因子中性化
  14. ios12最后一个正式版_iOS12.4正式版怎么样 iOS12.4正式版要不要升级
  15. Windows10系统下CUDA和cuDNN安装教程
  16. 视频监控知识100问
  17. 大数据面试演讲稿 离线数仓实时分析
  18. java 2017技术_2017《Java技术》预备作业 计科1502 李宇蒙
  19. 小林c语言语,C语言资料下载 - 北京-小林-攻城狮 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  20. stc51单片机串口接收多字节数据

热门文章

  1. @Html.Partial 和 @Html.RenderPartial 异同
  2. powerlevel10k乱码问题
  3. 200G+ IT视频教程赠送..
  4. AWE艾普兰奖结果揭晓,见证智能家电从创意到实际产品的落地
  5. 实战:如何打造一个好的标题进行引流?
  6. python画卡通人物_python pyqt5 卡通人物形状窗体
  7. 美食杰实现菜谱大全功能
  8. .全国各地的工程师 程序员特点分析,搞笑幽默--快来对号入座
  9. WPF 控件专题 Lable 控件详解
  10. Spring与XFire