无法启动泊坞窗容器

这是我的Dockerfile,它试图用Phusion Passenger来设置Nginx,然后安装Ruby。

# Build command: docker build --force-rm --tag="rails" . # Run command: docker run -P -d rails FROM ubuntu:14.04 ENV DEBIAN_FRONTEND noninteractive # Install nginx and passenger RUN sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7 RUN sudo sudo apt-get install -yf apt-transport-https ca-certificates RUN sudo echo 'deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main' > /etc/apt/sources.list.d/passenger.list RUN sudo chown root: /etc/apt/sources.list.d/passenger.list RUN sudo chmod 600 /etc/apt/sources.list.d/passenger.list RUN sudo apt-get update RUN sudo apt-get install -yf nginx-extras passenger RUN sudo service nginx restart # Install rbenv and ruby RUN sudo apt-get install -yf git autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev curl RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc RUN echo 'eval "$(rbenv init -)"' >> ~/.bashrc RUN /root/.rbenv/plugins/ruby-build/install.sh ENV PATH /root/.rbenv/bin:$PATH RUN rbenv install 2.1.5 RUN rbenv global 2.1.5 EXPOSE 80 

基本上,我可以build立图像很好,但我不能从这个图像启动一个容器。

这是我第一次使用docker,所以我怀疑我需要使用CMD指令,但是我不知道应该使用什么命令。

我感谢任何帮助,指出我的Dockerfile有什么问题。

容器运行成功,它刚刚退出,因为你没有指定任何进程运行。 一个容器只能运行一个主stream程。 正如你已经在后台运行它( -d标志)它不会提供任何输出,这有点混乱。

例如:

 $ docker run ubuntu echo "Hello World" Hello World 

容器运行命令并按预期退出。

 $ docker run -d ubuntu echo "Hello World" efd8f9980c1c9489f72a576575cf57ec3c2961e312b981ad13a2118914732036 

同样的事情发生了,但是当我们用-d运行时,我们得到了容器的id而不是输出。 我们可以使用logs命令获得输出:

 $ docker logs efd8f9980c1c9489f72a576575cf57ec3c2961e312b981ad13a2118914732036 Hello World 

你需要做的是启动你的Rails应用程序,或启动容器时你想让容器运行的任何进程。 您可以通过docker docker run命令执行此操作,也可以在Dockerfile中使用CMD语句。 请注意,主进程必须保持在前台 – 如果分叉到后台,容器将退出。

如果你想在一个容器中获得一个shell,请使用以下命令启动它:

 $ docker run -it ubuntu /bin/bash 

说实话,我想你会更好地使用官方形象,例如https://registry.hub.docker.com/_/rails/

你需要使用ENTRYPOINT来启动你想要的function,查看官方文档 。

看看日志说什么发布

docker logs rails

或者,如

docker ps -an 1

应该显示最后一个ID,用命令

docker logs this_id