Search code examples
dockerfilepushd

Possible to use pushd/popd in Dockerfile?


Is there any way to use pushd/popd commands within a Dockerfile? It'd make some install scripts I have a lot easier if it were possible.


Solution

  • It can be done but your image must have bash and all commands must be in the same RUN directive:

    Dockerfile

    FROM debian
    RUN mkdir -p /test/dir1/dir2
    RUN bash -xc "\
    pushd /test/dir1; \
    pwd; \
    pushd dir2; \
    pwd; \
    popd; \
    pwd; \
    "
    RUN pwd
    
    Sending build context to Docker daemon  77.25MB
    Step 1/4 : FROM debian
     ---> 2d337f242f07
    Step 2/4 : RUN mkdir -p /test/dir1/dir2
     ---> Using cache
     ---> d609d5e33b08
    Step 3/4 : RUN bash -xc "pushd /test/dir1; pwd; pushd dir2; pwd; popd; pwd; "
     ---> Running in 79aa21ebdd15
    + pushd /test/dir1
    + pwd
    + pushd dir2
    + pwd
    + popd
    + pwd
    /test/dir1 /
    /test/dir1
    /test/dir1/dir2 /test/dir1 /
    /test/dir1/dir2
    /test/dir1 /
    /test/dir1
    Removing intermediate container 79aa21ebdd15
     ---> fb1a07d6e342
    Step 4/4 : RUN pwd
     ---> Running in 9dcb064b36bb
    /
    Removing intermediate container 9dcb064b36bb
     ---> eb43f6ed241a
    Successfully built eb43f6ed241a
    Successfully tagged test:latest