如何保持启动服务后运行Docker容器?

我见过一堆教程,似乎做同样的事情,我想做的,但由于某种原因,我的Docker容器退出。 基本上,我在Docker容器中设置了一个web服务器和一些守护进程。 我通过一个名为run-all.sh的bash脚本来完成这个最后的部分,我在Dockerfile中通过CMD运行。 run-all.sh看起来像这样: service supervisor start service nginx start 我在Dockerfile中启动它,如下所示: CMD ["sh", "/root/credentialize_and_run.sh"] 我可以看到,所有的服务都是在我手动运行的时候正确启动的(比如用-i -t / bin / bash进入镜像),当我运行镜像时,所有的东西看起来都是正确的,但是它会退出一次它完成启动我的过程。 我希望进程无限期地运行,据我所知,容器必须继续运行。 不过,当我运行docker ps -a ,我看到: ➜ docker_test docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones 是什么赋予了? 它为什么退出? 我知道我可以在我的bash脚本的最后加上一个while循环来保持它,但是保持它不会退出的正确方法是什么?

Docker for Windows无法正常工作

我已经安装了Docker工具箱,我得到了一切的错误: Get http://127.0.0.1:2375/v1.20/version: dial tcp 127.0.0.1:2375: ConnectExtcp: No connection could be made because the target machine actively refused it.. * Are you trying to connect to a TLS-enabled daemon without TLS? * Is your docker daemon up and running? docker version输出: Client: Version: 1.8.1 API version: 1.20 Go version: go1.4.2 Git commit: d12ea79 Built: Thu […]

如何使用Docker,Puppet和Vagrant开发LAMP Web应用程序?

在黑暗时代,我通常开发的LAMP Web应用程序是在我的机器上进行本地testing。 PHP(在我的情况下),数据库和Web服务器都是本地安装的。 服务器是使用标准安装的Apache和MySQL进行安装的,而且我有多个虚拟主机用于Web应用程序的不同部分。 当我对我在本地机器上得到的结果感到满意时,我会login到服务器,然后在暂存环境中进行git pull 。 假设服务器上的所有东西都和我的机器一样,我也会为生产做同样的事情。 新的开始… 所以现在我从头开始一个全新的Web应用程序,我想要“正确的方式”。 我已经读了Docker,Vagrant和Puppet(还有厨师,尽pipe我个人更喜欢Puppet的依赖系统而不是Chef的迭代过程)。 尽pipe我所做的所有研究,似乎仍然有几个问题,我似乎无法find答案: 是否应为Web服务器(如Apache),数据库服务器(如MySQL)和Web应用程序的每个部分分别安装Docker容器? 当我谈论Web应用程序的某些部分时,我指的是mysite.com , controlpanel.mysite.com等等。这些“部分”将共享相同的数据库。 由于Docker似乎为Web和数据库服务器提供了现成的容器,所以至less应该将这些东西放在单独的容器中。 我的networking应用程序的不同部分应该在不同的容器中吗? Docker容器似乎被devise成可replace的,而不是我必须更新里面的软件。 他们写的数据怎么样,我不想丢失? 数据库服务器将pipe理与我的数据库内容相关的文件(我将要备份)。 Web服务器将创build日志,我的Web应用程序将pipe理各种文件和caching等。所有这些文件都需要写在应用程序的容器之外(因为我可能在更新时replace它们),所以它们在哪里? 直接进入主机的文件系统? 或成为一个单独的“Docker卷”? 如果他们进入Docker卷,我应该使用一个单独的卷为数据库,Web服务器,应用程序等? 我是否仍然可以像现在一样使用本地机器上的SFTP轻松访问内容? 我不想在这里失去任何便利! 使用Puppet创build和pipe理开发服务器和生产服务器的Docker容器是不是一个好主意? 看来Puppet支持直接pipe理Docker容器,所以这似乎是从头开始轻松设置服务器或生产环境(使用Vagrant)的一个相当好的方法。 希望我已经提出了一些相关的问题; 为了开发和生产类似LAMP的networking应用程序,获得一些适当的“最佳实践”将是非常好的,只是似乎没有太多的发现!

如何与Kubernetes进行本地开发?

Kubernetes似乎是将容器部署到集群云。 它似乎没有触及的是开发和分期环境(或类似)。 在开发过程中,您希望尽可能接近生产环境,并进行一些重要的改变: 在本地部署(或者至less在某个你可以访问的地方 ) 在页面刷新上使用最新的源代码 (假设它是一个网站;理想情况下页面自动刷新本地文件保存,如果你装载源代码,并使用像Yeoman一些东西可以完成)。 同样,人们可能想要一个非公共的环境来进行持续的整合 。 Kubernetes是否支持这样的开发环境,还是需要构build的东西,希望在生产过程中仍然有效?

如何将只有数据的卷从一台主机移植到另一台主机?

如Docker有关使用卷的文档中所述,存在所谓的“仅数据容器”的概念,它提供可以装入多个其他容器的卷,而不pipe数据专用容器是否实际运行。 基本上,这听起来很棒。 但有一件事我不明白。 由于Docker在主机上的某个内部文件夹( /var/docker/volumes/… )中创build并pipe理这些卷(由于可移植性原因而没有显式映射到主机上的文件夹)。 假设我使用这样一个卷,然后我需要将它从一个主机迁移到另一个主机 – 我该如何移植卷? AFAICS它有一个唯一的ID – 我可以去复制卷和其相应的数据专用容器到一个新的主机? 如何找出要复制的文件? 还是有一些内置的Docker,我没有发现呢?

在docker集装箱上安装多个卷?

我知道我可以在我的容器中使用类似的东西在我的主机上挂载一个目录 docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash 有没有办法创build多个主机 – 容器对? 例如逗号分隔的列表,或传入数组?

docker和docker-compose有什么不同?

docker和docker-compose似乎与相同的docker文件相互作用,这两个工具之间有什么区别?

如何在Dockerfile中发表评论?

我正在写一个Dockerfile,我想知道是否有任何方式在这个文件中发表评论? docker工人有一个评论选项,其余的一行,并忽略它?

Docker,如何从容器中获取容器信息?

我想让我的docker containers知道它们的configuration,就像通过元数据获取有关EC2实例的信息一样。 我可以使用(提供的docker正在监听端口4243 ) curl http://172.17.42.1:4243/containers/$HOSTNAME/json 得到它的一些数据,但想知道是否有更好的方法,至less得到容器的完整ID,因为HOSTNAME实际上缩短为12个字符,并且docker似乎执行了“最佳匹配”。 另外,如何获取Docker主机的外部IP(除访问AWS特有的EC2元数据外)

如何从Docker容器访问主机端口

我有一个运行jenkins的docker集装箱。 作为构build过程的一部分,我需要访问主机上本地运行的Web服务器。 有没有办法主机的Web服务器(可以configuration为运行在一个端口)可以暴露给jenkins容器? 编辑:我在Linux机器上本机运行docker。 更新: 除了@larsks回答下面,为了从主机获取主机IP的IP地址,我做了以下几点: ip addr show docker0 | grep -Po 'inet \K[\d.]+'