如何在Docker容器内安装/启动Docker引擎服务

3

我正在使用jenkins官方的docker容器运行,根据https://docs.docker.com/engine/installation/linux/debian/上的指示,我有以下dockerfile

FROM jenkins:2.32.1

# install docker inside this container
USER root
    # Install Docker inside Jenkins
    RUN apt-get update
    RUN apt-get purge "docker.io*"
    RUN apt-get update
    RUN apt-get install -y apt-transport-https ca-certificates gnupg2
    RUN apt-key adv \
       --keyserver hkp://ha.pool.sks-keyservers.net:80 \
       --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    RUN echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list
    RUN apt-get update
    RUN apt-cache policy docker-engine
    RUN apt-get update
    RUN apt-get install -y docker-engine
    RUN gpasswd -a jenkins docker
    USER jenkins

接下来我执行以下操作:

  • 从此Dockerfile构建一个镜像
  • 从该镜像运行一个容器
  • 作为root用户在容器中执行bash
  • 在容器内部的bash中运行sudo docker service start

这是我的输出结果:

root@1e0f4b325d58:/# sudo service docker start
mount: permission denied
rmdir: failed to remove ‘cpu’: Read-only file system
mount: permission denied
rmdir: failed to remove ‘cpuacct’: Read-only file system
mount: permission denied
rmdir: failed to remove ‘net_cls’: Read-only file system
mount: permission denied
rmdir: failed to remove ‘net_prio’: Read-only file system
/etc/init.d/docker: 96: ulimit: error setting limit (Operation not permitted)
1个回答

5

如果要在Docker容器中运行Docker,您需要将容器作为特权容器运行。

因此,需要类似于这样的东西(参考)(1):

docker run --privileged your_image:tag

你还需要小心处理iptables和App Armour,但是经过一些调试之后就可以运行。


另一种选择是在容器内部提供对Docker守护程序的访问,像这样 (2):

docker run -v /var/run/docker.sock:/var/run/docker.sock your_image:tag

参考:

1 https://blog.docker.com/2013/09/docker-can-now-run-within-docker/

2 https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接