一、RUN 后cd进不去
应该用 WORKDIR /home 进入
原因:
WORKDIR 指定工作目录(或称当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会自行创建。
Dockerfile 不能等同于 Shell 脚本来书写,下面是错误写法:
RUN cd /app
RUN echo "hello" > world.txt
此 Dockerfile 构建镜像,会发现找不到 /app/world.txt 文件,或者其内容不是 hello 。
在 Shell 中,连续两行是同一个进程执行环境,因此前一个命令修改的内存状态,会直接影响后一个命令;
而在 Dockerfile 中,这两行 RUN 命令的执行环境根本不同,是两个完全不同的容器。
每一个 RUN 都会启动一个容器、执行命令、然后提交存储层文件变更。
第一层 RUN cd /app 的执行仅仅是当前进程的工作目录变更,一个内存上的变化而已,其结果不会造成任何文件变更。
第二层启动的
本文总结了Dockerfile编写中常见的两个问题:1) 使用RUN cd命令无法改变后续命令的工作目录,应改用WORKDIR指令。Dockerfile的每条RUN命令在不同的容器环境中执行,不会保留上一条命令的内存状态。2) RUN后面source ~/.profile无效,因为sh不支持source,需要改用bash。
订阅专栏 解锁全文
1218

被折叠的 条评论
为什么被折叠?



