Docker命令在构build期间失败,但在运行容器内执行时成功
命令 :
docker build -t nginx-ubuntu .
以下是Dockerfile:
从Ubuntu的:12.10 运行apt-get更新 运行apt-get -y install libpcre3 libssl-dev 运行apt-get -y install libpcre3-dev 运行apt-get -y install wget zip gcc 运行wget http://nginx.org/download/nginx-1.4.1.tar.gz 运行gunzip nginx-1.4.1.tar.gz 运行tar -xf nginx-1.4.1.tar 运行wget - 无检查证书https://github.com/max-l/nginx_accept_language_module/archive/master.zip RUN解压主 运行cd nginx-1.4.1 RUN ./configure --add-module = .. / nginx_accept_language_module-master --with-http_ssl_module --with-pcre = / lib / x86_64-linux-gnu --with-openssl = / usr / lib / x86_64-linux- GNU
在最后一行失败(./configure …)
如果我删除最后一行并在容器中运行一个bash,并手动执行最后一行,它将起作用。
我期望无论命令在容器中成功运行的任何命令应附加在Dockerfile(前缀由运行)
我错过了什么?
pwd在RUN命令中不是永久的。 您需要在同一个RUN中进行cd和configuration。
这个Dockerfile工作正常:
FROM ubuntu:12.10 RUN apt-get update RUN apt-get -y install libpcre3 libssl-dev RUN apt-get -y install libpcre3-dev RUN apt-get -y install wget zip gcc RUN wget http://nginx.org/download/nginx-1.4.1.tar.gz RUN gunzip nginx-1.4.1.tar.gz RUN tar -xf nginx-1.4.1.tar RUN wget --no-check-certificate https://github.com/max-l/nginx_accept_language_module/archive/master.zip RUN unzip master RUN cd nginx-1.4.1 && ./configure --add-module=../nginx_accept_language_module-master --with-http_ssl_module --with-pcre=/lib/x86_64-linux-gnu --with-openssl=/usr/lib/x86_64-linux-gnu
作为@ creak的答案的替代scheme,可以使用WORKDIR
命令更改Dockerfile中的默认工作目录:
FROM ubuntu:12.10 # Run update & install together so that the docker cache doesn't # contain an out-of-date APT cache (leading to 404's when installing # packages) RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install libpcre3 libssl-dev libpcre3-dev wget zip gcc ADD http://nginx.org/download/nginx-1.4.1.tar.gz nginx-1.4.1.tar.gz RUN tar -zxf nginx-1.4.1.tar.gz RUN wget --no-check-certificate https://github.com/max-l/nginx_accept_language_module/archive/master.zip RUN unzip master WORKDIR nginx-1.4.1 RUN ./configure --add-module=../nginx_accept_language_module-master --with-http_ssl_module --with-pcre=/lib/x86_64-linux-gnu --with-openssl=/usr/lib/x86_64-linux-gnu
这也会影响使用docker run
时的默认目录(由-w
开关覆盖)。
当我用RUN调用wget
或tar
,我需要指定一个path,如果您想使用WORKDIR作为path,ADD看起来就是正确的方法。 所以下面的任何一个解决了我的问题。
跑
RUN wget http://nginx.org/download/nginx-1.4.1.tar.gz -P ~/directory RUN tar -zxf ~/directory/nginx-1.4.1.tar.gz -C ~/directory
要么
加
WORKDIR ~/directory ADD http://nginx.org/download/nginx-1.4.1.tar.gz nginx-1.4.1.tar.gz RUN tar -zxf nginx-1.4.1.tar.gz
第二种方法阻止了我需要在容器中安装wget。
- 在ASP.NET Core中构builddocker:“没有这样的文件或目录”错误
- Dokku / Docker,如何在运行容器的文件系统中访问文件?
- XDebug无法在Docker中打开远程debugging文件'/var/log/apache2/xdebug_remote.log'
- Docker项目结构与子模块
- 在父pom构build的最后端运行docker-maven-plugin
- 具有请求的Docker Elasticsearch插件
- 每当我们重启区块链服务器时,我们是否应该初始化Docker守护进程?
- 用activemq添加camunda -bpm-wildfly并运行在相同的docker容器中
- 如何通过Docker在MongoDB上启用身份validation?