2014-06-16 15 views
5

我建立我与以下Dockerfile项目:泊坞窗 - 容器中取出建立后

FROM ubuntu:14.04 

#"updating package repos.." 
RUN apt-get update 

#"installing required packages.." 
RUN apt-get -y install python2.7-dev build-essential python-pip 
run apt-get -y install libjpeg-dev libpng3 libpng12-dev 
run apt-get -y install nodejs npm nodejs-legacy 
run npm install -g peer 
run apt-get -y install supervisor 

#"creating sites folder under /opt" 
run mkdir /opt/sites 

#"copying project into /opt/sites" 
add project-latest /opt/sites/project-latest 

#"copying supervisor conf into /etc/supervisor/conf.d" 
add etc/project.conf /etc/supervisor/conf.d/ 

#"installing virtualenv" 
run pip install virtualenv 

#"change working dir to /opt/sites/project-latest" 
workdir /opt/sites/project-latest 

#"create vritualenv folder named 'env' " 
run virtualenv env 

#"activating environment" 
run . env/bin/activate 

#"installing packages into env from requirements.txt" 
run pip install -r requirements.txt 

#"syncing DB" 
run python manage.py syncdb 

#"migrating DB" 
run python manage.py migrate 

#"update and restart supervisorctl" 
run service supervisor start 
cmd supervisorctl reread 
cmd supervisorctl update 
cmd supervisorctl restart all 

#"expose 8000 and 9000 ports" 
expose 8000 
expose 9000 

这是构建过程的最终输出:

Successfully built 29dbd8e8bb0a 
Removing intermediate container 8a20545921e0 
Removing intermediate container 0da63841f6ad 
Removing intermediate container fab164fe93c2 
Removing intermediate container 77b61eceef36 
Removing intermediate container 87a24b079f47 
Removing intermediate container cb2520749e30 
Removing intermediate container 9e9c54376433 
Removing intermediate container 130f6eaeed6a 
Removing intermediate container 56f9d93a1e75 
Removing intermediate container 599b10008caa 
Removing intermediate container eab7598a5e95 
Removing intermediate container c31b58fcc405 
Removing intermediate container 8b4a55fbb345 
Removing intermediate container 13b35d86044e 
Removing intermediate container 0ab10eef8f5e 
Removing intermediate container ebf42d9493f1 
Removing intermediate container 70c772c4aa73 
Removing intermediate container fe5039bfbe15 
Removing intermediate container 8f9a93cd5438 
Removing intermediate container 2d673cf029f8 
Removing intermediate container ab8485d09ee7 
Removing intermediate container 0fdfa200ac27 
Removing intermediate container d2d02358e25d 

如果我创建一个容器来运行bash在我构建的图像中,我看到一些构建步骤被遗忘。即我的requirements.txt文件没有虚拟环境。

而我不知道如何从我的主机打开我的运行django application。没有任何端口或IP信息。

回答

8

删除中间图像是正常的。如果你想保留它们,你必须添加--rm=false到你的build命令。

Dockerfile存在一些问题。对于初学者,只有最后的CMD才会生效(这里是the docs)。

而且,这一行看起来可疑:

run . env/bin/activate 

我猜它的意思是设置一些环境变量,但我不认为这是方式泊坞窗的作品。我认为,要么你必须使用ENV命令,或者你必须运行这一点,下面的命令在一起:

run . env/bin/activate; pip install -r requirements.txt; python manage.py syncdb; python manage.py migrate 

关于端口,你跑与-p-P选择的形象呢?

+0

好的。我会试试这个。如果它有效,我会接受。 – alix

+1

你确定吗?我认为在阅读'--rm = true'语法后,会删除它们,而不保留它们。即使它们已被删除,这些中间映像仍会显示在'docker images -a'上吗? 编辑:http://docs.docker.com/reference/commandline/cli/#build 那些似乎被缓存的中间步骤:http://docs.docker.com/reference/commandline/cli/#images – clst

+2

是的,愚蠢的错误,它应该是'--rm = false'。另外我不记得当时哪个版本的docker是相关的,但我认为它是在1.0之前,所以一些选项和默认值可能在此期间发生了变化。 – ivant