无法启动docker容器

时间:2015-01-06 10:20:00

标签: docker dockerfile

这是我的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

基本上,我可以很好地构建图像,但我无法从此图像中启动容器。

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

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

3 个答案:

答案 0 :(得分:5)

容器正在成功运行,它只是立即退出,因为您没有指定任何要运行的进程。容器只会在其主进程中运行。当你在后台运行它(-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 run命令或使用Dockerfile中的CMD语句执行此操作。请注意,主进程必须保留在前台 - 如果它向后台分叉,则容器将退出。

如果要在容器中获取shell,请使用-it启动它,例如:

$ docker run -it ubuntu /bin/bash

说实话,我认为使用官方图片可以提供更好的服务,例如: https://registry.hub.docker.com/_/rails/

答案 1 :(得分:2)

您需要使用ENTRYPOINT来启动您想要的内容,请查看official documentation

答案 2 :(得分:0)

通过发布

查看日志的内容

docker logs rails

或,如

docker ps -an 1

应使用命令

显示最后一个id

docker logs this_id