Home > database >  Docker build - use the same shell for all RUN commands
Docker build - use the same shell for all RUN commands

Time:03-29

Is it possible to use the same shell in all RUN commands when building a docker image? As opposed to each RUN command running on its own shell.

Use case: at some point, I need to source some file containing environment variables that are used later on. I cannot do this, because the commands run in different shells:

RUN source something.sh
RUN ./install.sh
RUN ... more commands

Instead I have to do:

RUN source something.sh && \
    ./install.sh && \
    ... more commands

Which I'm trying to avoid since it hurts readability, it's error prone and does not allow inserting comments in between commands.

Any ideas?

Thanks!

CodePudding user response:

It's not possible to have separate RUN statement run in the same shell.

If you don't like the look of concatenated commands, you could write a shell script and RUN that.

You'll have to get it into the container by using a COPY statement. Or you can use wget or curl to fetch it and pipe it into a shell. That requires that wget or curl is present in the container, so you might have to install them first.

If you use curl and Debian, it could look like this

RUN apt update && \
    apt install -y curl && \
    curl -sL https://github.com/link/to/my/install-script.sh | bash

If you COPY it in, it'd look like this

COPY install-script.sh .
RUN ./install-script.sh
  • Related