In terms of the way Docker works, is there any difference between RUN cd /
and WORKDIR /
inside a Dockerfile?
Asked
Active
Viewed 1.7k times
46

Hossein Kalbasi
- 1,641
- 2
- 13
- 26
-
2"_It is to mention that WORKDIR / gives me errors_" : What errors? – Gino Mempin Nov 13 '19 at 23:59
-
It probably depends on your base Docker image and the other parts of your Dockerfile. For example, I have `FROM ubuntu:18.04` and `WORKDIR /` and it works OK. You need to help us reproduce your problem. – Gino Mempin Nov 14 '19 at 00:12
-
okay thanks ... it's part of another server, it's a bit complicated but I don't know why cd / works but WORKDIR / results in weird errors. I edited my question. – Hossein Kalbasi Nov 14 '19 at 01:18
1 Answers
76
RUN cd /
does absolutely nothing. WORKDIR /
changes the working directory for future commands.
Each RUN
command runs in a new shell and a new environment (and technically a new container, though you won't usually notice this). The ENV
and WORKDIR
directives before it affect how it starts up. If you have a RUN
step that just changes directories, that will get lost when the shell exits, and the next step will start in the most recent WORKDIR
of the image.
FROM busybox
WORKDIR /tmp
RUN pwd # /tmp
RUN cd / # no effect, resets after end of RUN line
RUN pwd # still /tmp
WORKDIR /
RUN pwd # /
RUN cd /tmp && pwd # /tmp
RUN pwd # /
(For the same reason, RUN export
doesn't do anything that outlives the current Dockerfile instructions, and RUN .
or the non-standard RUN source
won't cause environment variables to be set.)

David Maze
- 130,717
- 29
- 175
- 215
-
18“_Does absolutely nothing_” **to the subsequent `RUN`s, not the current one.** – Константин Ван Jun 25 '21 at 21:25