Articles of Docker

如何确保docker主机不允许生根

我正在尝试使服务器上的docker更安全。 主要的问题是,大多数人都说“如果一个人可以访问泊坞窗,他们也可以是root”,对于一个pipe理员来说,这不是你想要的。 详细说一下,他们可以使用-v并将/etc挂载到容器中的/mnt上,并更改影子文件并获得对主机的访问权限。 他们可以使用-d或特权选项来做更多的事情。 所以基本上,有一些我想“尝试”和限制的东西。 卷绑定挂载 特权 –add-cap -d (某些项目?) 我的想法到目前为止: docker的bash脚本的别名,使用sudo和正则expression式,他们不应该做的。 打开远程api,保护它,也许反向使用nginx和正则expression式在nginx中代理它们不应该做的事情。 使用其他工具? Mesos /马拉松/群/船厂/无论 可选项是将容器提交给git代码,并让“检查器”validationDockerfile的内容并为其创build映像。 然后签署该图像并自动部署。 (但是这不会给他们太多的自由) 另外,删除绑定量并不是最好的。 如果我们有一个Dockerfile插件,说“你只能挂载在/data ,用户X”, Dockerfile中的USER是那个用户X,会更简单些。 像docker-novolume-plugin这样的东西对于卷来说已经是一个不错的开始,但是并不限制绑定卷。 最后问题是,我怎么让用户build立/拉/运行泊坞窗图像作为自己的用户/docker,不能根系统。 只要工作,就不一定是完美的。

如何在Windows 2016上正确设置Dockernetworking?

我已经build立了docker引擎模块,并且我自动创build了NAT交换机。 我的问题是:如果有机会,我可以使用现有的Hyper-V虚拟交换机来连接我的容器? 我也可以让我的networking连接透明吗? 我将不胜感激关于这个问题的任何准则。 奖金的问题:是否有任何现实的原因,我应该留在Hyper-V容器而不是Windows主机内核容器考虑到我不太在乎安全性,我的主要目的是隔离一些地方来testing应用程序,使系统一样快可能? 谢谢你们。

检查是使用docker-compose运行的容器/服务

我正在使用docker-compose 。 像up -d service_name或start service_name这样的一些命令正在返回,如果不希望运行的容器依赖于shell的状态,就像使用常规的up service_name一样,这很有用。 一个用例就是从某种连续的集成/交付服务器运行它。 但是这种运行/启动服务的方式并没有提供关于服务的实际状态的任何反馈。 up命令的Docker Compose CLI参考提到了相关选项,但是对于版本1.7.1 ,它与-d是互斥的: –abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.* 我可以以某种方式手动检查容器确实工作,并没有因为一些错误而停止?

Debian / IPv6:默认路由在1800秒后过期,失去连接

我在vServer上运行Debian 8。 在安装docker和启用IPv6后,我注意到一些奇怪的东西。 我不知道docker是否与这个有关,只是在安装之后才发现这个问题。 我的默认路由configuration为在ca后过期。 1800secs。 我在这个超时之后实际上消失了。 这是当我(显然)宽松的IPv6连接。 root@wopr:~# ip -6 route xxxx:yyyy:zzz:xxxx::/64 dev eth0 proto kernel metric 256 fe80::/64 dev eth0 proto kernel metric 256 fe80::/64 dev br-5c1ce68ea951 proto kernel metric 256 fe80::/64 dev br-61f6bbfdbe87 proto kernel metric 256 [a lot more routed for my docker containers] default via fe80::1 dev eth0 proto ra […]

Nginx:当nginx运行在supervisord下时,如何使用docker log collector

官方的nginx docker image( Dockerfile )使用以下技巧将其日志交给stdout和stderr,以便docker日志采集器捕获这些日志并使用docker logs <container-name> : # forward request and error logs to docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log 我想要做同样的事情,但是我在我的容器中拥有supervisord作为PID 1,它监督nginx进程并捕获stdout和stderr并将其放入它自己的日志文件中。 因此日志不能到达docker日志收集器。 这是我的supervisord.conf中的相关块 [program:nginx] command=/usr/sbin/nginx -g "daemon off;" priority=990 ; NOTE: We do not want to redirect stdout and stderr of a nginx process to a […]

如何通过TCP公开Docker API?

我正在使用portainer,无法pipe理远程端点。 我尝试使用命令行连接到远程docker节点,但得到一条消息Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running? Cannot connect to the Docker daemon at tcp://<remote_ip>:<port>. Is the docker daemon running? 。 是的,他们正在运行。 我已经将自己添加到docker组,并可以通过SSH到节点中访问docker。 不过,我无法远程访问任何docker节点。 我修改了/etc/default来添加/取消注释DOCKER_OPTS="–dns 8.8.8.8 –dns 8.8.4.4 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" 我还修改了/etc/init.d/docker和/etc/init/docker.conf以包含DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock" 。 我重新启动了docker服务,在此过程中多次注销并login,但仍无法连接到远程节点。 我甚至不能通过传递IP来连接到本地节点。 我错过了什么? 在什么文件中公开了基于TCP的API? user@hostname:~$ docker -H tcp://<REMOTE_IP>:2375 info Cannot connect […]

为什么Jenkins用户没有权限访问Docker unix套接字?

我已经将jenkins用户添加到了jenkins组,他们认为这将允许Jenkins作业运行Docker命令。 如果我切换到jenkins用户,我可以validation它的工作原理(手动): ubuntu@hostname:~$ ps aux | grep java jenkins 2210 9.5 7.5 1950316 292896 ? Sl 00:01 1:00 /usr/bin/java -jar /data/jenkins/jenkins-1.586.war –httpPort=8080 -Xloggc:/var/log/jenkins/gc.log ubuntu@hostname:~$ getent group docker docker:x:999:jenkins ubuntu@hostname:~$ ls -la /var/run/docker.* -rw-r–r– 1 root root 4 Oct 23 18:32 /var/run/docker.pid srw-rw—- 1 root docker 0 Oct 23 18:32 /var/run/docker.sock ubuntu@hostname:~$ sudo su -s /bin/bash […]

容器和虚拟机有什么区别?

我想理解所有这些与虚拟机不同的容器。 对于这两种虚拟化方法都可以观察到具有所有操作系统的文件系统。 但是在一个Docker容器中,例如centos 5.x,如果我在容器的shell中执行uname -a ,输出将显示我的主机内核版本。 它是如何工作的,以及与经典虚拟机(vmware,virtualbox,xen等)的主要区别?

用ISO预装docker镜像以便重新分配

我们正在开发一个应用程序,将现场部署到各种安装(而不是云)。 我们的OEM合作伙伴要求我们为他们提供ISO,以便能够快速configuration新的服务器。 我们的应用程序是build立在容器周围,我们有一个私人的面向Internet的registry设置能够拉最新的传递构build。 我还不确定OEM合作伙伴是否能够自己提取这些图像,因此我们正在调查预装docker图像和ISO的可能性,但是有一些困难。 我们尝试过的一些事情: systemback – 我们尝试使用我们的首选设置(由我们拥有的angular色定义)提供新的ubuntu安装,然后使用systemback捕获结果。 在重新安装生成的ISO后,我们遇到了docker错误: Error response from daemon: open /var/lib/docker/aufs/layers/blahblahblah: no such file or directory类似于#22343的 Error response from daemon: open /var/lib/docker/aufs/layers/blahblahblah: no such file or directory chroot监狱 – 再次,我们试图创build我们的用户,安装docker,但试图拉我们的图像时,我们迎接: failed to register layer: Error processing tar file(exit status 1): invalid argument无论我们拉什么形象(即使官方dockerUbuntu的形象,例如)。 Google对这个错误没有任何帮助。 RancherOS – 在这里,我们find了预装docker 映像的说明,但不知道如何将它们与iso捆绑在一起 。 看起来我们和#1449有相同的用例,但是没有真正的解决scheme。 现在所有我能想到接下来的尝试是docker save我们的图像,并包括与ISO的tarball,然后当第一次启动ISO运行一个脚本来检查docker图像是否存在,如果不存在,做一个docker […]

Docker:在添加了ADD的文件夹上拒绝权限

我正在尝试使用dockerconfigurationpostgresql安装。 FROM ubuntu:13.10 ADD . /db # install postgres # … RUN chown postgres:postgres /db -R && \ chmod 700 /db -R USER postgres RUN /etc/init.d/postgresql start &&\ createdb test &&\ psql -d test -f /db/all.sql 我可以访问文件夹/ db,但不能访问/ db / plpgsql(其中包含由/db/all.sql执行的文件) 我试图在/ db / plpgsql上的chmod 777,但它也不起作用,权限被拒绝。 postgres@c364bdd94652:/$ ls -l | grep db drwxrwxrwx 5 postgres […]