我正在学习Docker.很多次,我看到它Dockerfile有WORKDIR命令
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 3000
CMD [ “npm”, “start” ]
Run Code Online (Sandbox Code Playgroud)
我不能省略WORKDIR,Copy只是让我Dockerfile的项目根源?使用这种方法的缺点是什么?
我们可以使用WORKDIR将目录设置为工作目录Dockerfile,但如果我们没有设置,那么默认值是什么?
命令 :
docker build -t nginx-ubuntu .
Run Code Online (Sandbox Code Playgroud)
下面的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 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中附加命令(以RUN为前缀),在容器中成功运行的任何命令都应该有效
我错过了什么吗?
就 Docker 的工作方式而言,Dockerfile之间RUN cd /和WORKDIR /内部有什么区别吗?