由于用惯了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. jquery中动画效果的函数
  2. 信息系统项目管理师备考之旅1---学习计划和方法制定
  3. RTSP再学习 -- RTSP协议分析(转载)
  4. Express框架开发知识点总结
  5. JavaScript中的定时器
  6. git指令如何葱master转到dev_看完这篇还不会用Git,那我就哭了
  7. [转载] Python进程——multiprocessing.Event()|Barrier()
  8. 6-7 使用函数输出水仙花数_Go语言并发如何使用才更加高效
  9. Android 中进程的级别以及 Service 的优先级
  10. 《软件管理沉思录》读书笔记
  11. 路由守卫(全局钩子(全局路由守卫)、路由单独钩子(router独享守卫))
  12. python计算目标文件夹中各文件的GC含量
  13. 快速拿到 win10 锁屏壁纸
  14. K3S执行命令提示You must be logged in to the server (Unauthorized)
  15. 举些例子看看一个程序员的水平究竟可以差到什么程度?
  16. 时频分析:短时傅里叶变换
  17. linux中 不在sudoers文件中此事将被报告
  18. consul重启导致服务必须跟着重启解决方案
  19. android底层 考试 华清,Android开发架构你真的了解吗—华清创客学院
  20. 强化学习 马尔科夫决策过程(MDP)

热门文章

  1. 内网中CobaltStrike4.0(CS4)的渗透之旅
  2. 个人工具集(常用在线工具、浏览器插件、IDE插件、其他工具等)
  3. 当着众多MM脱裤子放屁
  4. 12306能删候补订单记录_12306“候补购票”今日上线 一个订单可添加4个候补需求...
  5. 基于安卓的房产网上交易平台app—计算机毕业设计
  6. Java里面Random的用法_Java中Random的用法
  7. FSRCNN四倍放大
  8. linux grep过滤命令
  9. 钟表维修管理系统技术解析 维修记录(五)
  10. 调色板8位图片转24位图片