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

后端 未结 3 1287
执念已碎
执念已碎 2020-12-13 04:52

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

3条回答
  •  旧巷少年郎
    2020-12-13 05:20

    The default shell in Alpine Linux is ash.

    Ash will only read the /etc/profile and ~/.profile files if it is started as a login shell sh -l.

    To force Ash to source the /etc/profile or any other script you want upon its invocation as a non login shell, you need to setup an environment variable called ENV before launching Ash.

    e.g. in your Dockerfile

    FROM alpine:3.5
    
    ENV ENV="/root/.ashrc"
    
    RUN echo "echo 'Hello, world!'" > "$ENV"
    

    When you build that you get:

    deployer@ubuntu-1604-amd64:~/blah$ docker build --tag test .
    Sending build context to Docker daemon  2.048kB
    Step 1/3 : FROM alpine:3.5
    3.5: Pulling from library/alpine
    627beaf3eaaf: Pull complete
    Digest: sha256:58e1a1bb75db1b5a24a462dd5e2915277ea06438c3f105138f97eb53149673c4
    Status: Downloaded newer image for alpine:3.5
     ---> 4a415e366388
    Step 2/3 : ENV ENV "/root/.ashrc"
     ---> Running in a9b6ff7303c2
     ---> 8d4af0b7839d
    Removing intermediate container a9b6ff7303c2
    Step 3/3 : RUN echo "echo 'Hello, world!'" > "$ENV"
     ---> Running in 57c2fd3353f3
     ---> 2cee6e034546
    Removing intermediate container 57c2fd3353f3
    Successfully built 2cee6e034546
    

    Finally, when you run the newly generated container, you get:

    deployer@ubuntu-1604-amd64:~/blah$ docker run -ti test /bin/sh
    Hello, world!
    / # exit
    

    Notice the Ash shell didn't run as a login shell.

    So to answer your query, replace

    ENV ENV="/root/.ashrc"
    

    with:

    ENV ENV="/etc/profile"
    

    and Alpine Linux's Ash shell will automatically source the /etc/profile script each time the shell is launched.

    Gotcha: /etc/profile is normally meant to only be sourced once! So, I would advise that you don't source it and instead source a /root/.somercfile instead.

    Source: https://stackoverflow.com/a/40538356

提交回复
热议问题