dockershashalpine-linux

How to get /etc/profile to run automatically in Alpine / Docker


How can I get /etc/profile to run automatically when starting an Alpine Docker container interactively? I have added some aliases to an aliases.sh file and placed it in /etc/profile.d, but when I start the container using docker run -it [my_container] sh, my aliases aren't active. I have to manually type . /etc/profile from the command line each time.

Is there some other configuration necessary to get /etc/profile to run at login? I've also had problems with using a ~/.profile file. Any insight is appreciated!

EDIT:

Based on VonC's answer, I pulled and ran his example ruby container. Here is what I got:

$ docker run --rm --name ruby -it codeclimate/alpine-ruby:b42
/ # more /etc/profile.d/rubygems.sh
export PATH=$PATH:/usr/lib/ruby/gems/2.0.0/bin
/ # env
no_proxy=*.local, 169.254/16
HOSTNAME=6c7e93ebc5a1
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
/ # exit

Although the /etc/profile.d/rubygems.sh file exists, it is not being run when I login and my PATH environment variable is not being updated. Am I using the wrong docker run command? Is something else missing? Has anyone gotten ~/.profile or /etc/profile.d/ files to work with Alpine on Docker? Thanks!


Solution

  • You still can try in your Dockerfile a:

    RUN echo '\
            . /etc/profile ; \
        ' >> /root/.profile
    

    (assuming the current user is root. If not, replace /root with the full home path)

    That being said, those /etc/profile.d/xx.sh should run.
    See codeclimate/docker-alpine-ruby as an example:

    COPY files /
    

    With 'files/etc" including an files/etc/profile.d/rubygems.sh running just fine.


    In the OP project Dockerfile, there is a

    COPY aliases.sh /etc/profile.d/
    

    But the default shell is not a login shell (sh -l), which means profile files (or those in /etc/profile.d) are not sourced.

    Adding sh -l would work:

    docker@default:~$ docker run --rm --name ruby -it codeclimate/alpine-ruby:b42 sh -l
    87a58e26b744:/# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/ruby/gems/2.0.0/bin