Docker组合起来不会启动一个容器

Dockerfile:

FROM shawnzhu/ruby-nodejs:0.12.7 RUN \ apt-get install git \ && npm install -g bower gulp grunt \ gem install sass RUN useradd -ms /bin/bash devel # Deal with ssh COPY ssh_keys/id_rsa /devel/.ssh/id_rsa COPY ssh_keys/id_rsa.pub /devel/.ssh/id_rsa.pub RUN echo "IdentityFile /devel/.ssh/id_rsa" > /devel/.ssh/config # set root password RUN echo 'root:password' | chpasswd # Add gitconfig COPY .gitconfig /devel/.gitconfig USER devel WORKDIR /var/www/ EXPOSE 80 

docker-compose.yml文件:

 nodejs: build: . ports: - "8001:80" - "3000:3000" volumes: - ~/Web/docker/nodejs/www:/var/www 

命令:

$ docker-compose build nodejs

$ docker图片

 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nodejs_nodejs latest aece5fb27134 2 minutes ago 596.5 MB shawnzhu/ruby-nodejs 0.12.7 bbd5b568b88f 5 months ago 547.5 MB 

$ docker-compose up -d nodejs

 Creating nodejs_nodejs_1 

$ docker ps

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 

$ docker ps –all

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c24c6d0e756b nodejs_nodejs "/bin/bash" About a minute ago Exited (0) About a minute ago nodejs_nodejs_1 

正如你所看到的docker-compose up -d应该已经创build了一个容器并在后台运行它,但是没有。 而是用代码0退出。

如果您的Dockerfile没有执行任何操作(例如Web服务器在端口80上侦听),那么一旦它完成运行指令,它将被丢弃。 因为Docker容器应该是“短暂的” 。

如果你只是想启动一个容器,并通过terminal进行交互,不要使用docker-compose up -d ,而是使用下面的代码:

 docker run -it --entrypoint=/bin/bash [your_image_id] 

这将启动您的容器并运行/bin/bash-it可以帮助您保持terminal会话与容器交互。 完成作品后,请按Ctrl-D退出。