无法启动 docker 容器
Cannot start a docker container
这是我的 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 有什么问题的人。
通过发出
查看日志的内容
docker logs rails
或者,作为
docker ps -an 1
应显示最后一个 ID,使用命令
docker logs this_id
你需要使用ENTRYPOINT
来启动你想要的,勾选official documentation。
容器 运行 成功,它只是立即退出,因为您没有为 运行 指定任何进程。一个容器只会 运行 只要它的主进程。当你 运行 它在后台(-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/.
这是我的 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 有什么问题的人。
通过发出
查看日志的内容docker logs rails
或者,作为
docker ps -an 1
应显示最后一个 ID,使用命令
docker logs this_id
你需要使用ENTRYPOINT
来启动你想要的,勾选official documentation。
容器 运行 成功,它只是立即退出,因为您没有为 运行 指定任何进程。一个容器只会 运行 只要它的主进程。当你 运行 它在后台(-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/.