docker 容器使用systemctl
以ubuntu做为参考。
拉取容器
-
直接拉取
使用
docker pull ubuntu
直接拉取。 -
通过Dockerfile拉取
:
# 基础镜像 FROM ubuntu:18.04 # build参数 ARG user=duapple # 元数据 LABEL maintainer="hejiang" email="2832893880@qq.com" # 安装依赖 #RUN apt-get update && apt-get install -y sudo # 添加用户:赋予sudo权限,指定密码 RUN useradd --create-home --no-log-init --shell /bin/bash ${user} \ && adduser ${user} sudo \ && echo "${user}:123123" | chpasswd # 改变用户的UID和GID #RUN usermod -u 1000 ${user} && usermod -G 1000 ${user} # 指定容器起来的工作目录 WORKDIR /home/${user} # 指定容器登录用户 USER {user}
拉取:
$ docker build -t ubuntu1804:test .
如果没有上网能力,可以先不安装sudo,进入系统后,安装软件源sudo。
# 配置容器
这里以docker以拉取的镜像为例。直接拉取镜像需要手动创建非镜像root用户,其他操作一直保持在下面。 无Dockerfile在实施前需要新用户脚本。 add_user.sh
:
#!/bin/bash user=$1 echo "add user: ${user}" useradd -d /home/${user} -m ${user} passwd ${user} usermod -g ${user} -G root ${user} chmod u w /etc/sudoers echo "${user} ALL=(ALL:ALL) ALL" >> /etc/sudoers chmod u-w /etc/sudoers usermod -s /bin/bash ${user}
# add_user.sh duapple
创建容器并运行。
$ docker run --privileged -itd --name ubuntu_test -u root ubuntu1804:test /bin/bash $ docker exec -it ubuntu_test /bin/bash
修改root密码并安装sudo。
# passwd # apt update # apt install sudo
切换到duapple用户。测试sudo,并安装systemd。
# exit $ docker exec -it -u duapple ubuntu_test /bin/bash $ sudo apt install systemd $ ls -al /sbin/init
下载ssh,进行测试。
$ sudo apt install ssh $ sudo systemctl start ssh
此时会报错:
:
$ exit $ docker stop ubuntu_test $ sudo systemctl stop docker # sudo su #
修改 config.v2.json
中的 Path
和 Cd
,由 /bin/bash
设置为 /sbin/init
。
# vim /var/lib/docker/containers/0f22b0c68de9819eb72d02094a5d23d3ee66e4eabd3563b9190f48ac83c55f22/config.v2.json
保存修改后,重启docker,再重启docker容器,重新配置即可。
$ docker start ubuntu_test
$ docker exec -it -u duapple ubuntu_test /bin/bash
$ sudo systemctl start ssh
$ sudo systemctl status ssh