Alpine Linuxログイン用の起動スクリプトは何ですか? (ログイン時にエイリアスが必要です)

Alpine Linuxログイン用の起動スクリプトは何ですか? (ログイン時にエイリアスが必要です)

Dockerコンテナの場合、Node:AlpineなどのAlpine Linuxを使用して画像をできるだけ小さく保ちます。しかし、時にはコンテナにログインしたいことがあります。このコンテナにエイリアスを置くと便利です。

標準のLinuxを使用している場合は、.bashrcを/root/.bashrcにマップし、すべてのエイリアスを使用できるようにします。

しかし、Alpine Linixに対応する.bashrcが見つかりません。

私は試した:

  • .bashrc
  • .bash_config ファイル
  • 。輪郭
  • .ash_profile
  • .ashrc

すべて動作しません。

追加情報

Alpine LinuxはDockerコンテナから起動します。

ドッカーファイル

FROM node:alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/build .

ログインコンテナ

ホストコンピュータ(マイOSX Macbook)で次のコマンドを使用します。

docker exec -it <containerName> /bin/sh

docker-compose.yml

  jobrunner:
    build:
      context: ./build
      dockerfile: Dockerfile
    image: jobrunner:1.0
    volumes:
      - ./deployment/jobs/root/.bashrc:/root/.bashrc
      - ./deployment/jobs/root/.bashrc:/root/.profile
      - ./logs:/usr/src/app/logs
      - ./data:/usr/src/app/data
    environment:
      NODE_ENV: production
    restart: unless-stopped
    container_name: JobHelloWorld
    command: ["node", "./src/job_starter.js"]

コンテナを起動します。

docker-compose up -d

コンテナに

コンテナに入ると

docker exec -it <containername> /bin/sh

以下は、コメントから要求されたコマンドの出力です。

/usr/src/app # echo $SHELL

/usr/src/app # ps -p $$
ps: unrecognized option: p
BusyBox v1.32.1 () multi-call binary.

Usage: ps [-o COL1,COL2=HEADER] [-T]

Show list of processes

    -o COL1,COL2=HEADER Select columns for display
    -T          Show threads
/usr/src/app #

ポリスチレン-EF

「ps -ef」の出力も興味深いです。

/usr/src/app # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 360d
    8 root      0:00 sh
   16 root      0:00 ps -ef

shシェルが表示されます(正しいですか?)。ただし、/bin/sh 起動は機能しません。

補助grep$$

/usr/src/app # ps aux | grep $$
   19 root      0:00 /bin/sh
   26 root      0:00 grep 19

/bin/sh はリンクです

/usr/src/app # ls -la /bin/sh
lrwxrwxrwx    1 root     root            12 Apr 14 10:25 /bin/sh -> /bin/busybox

小さなテスト変更.profile

/usr/src/app # cat ~/.profile
alias l='ls $LS_OPTIONS -la'

export foo="bar"

/usr/src/app #
/usr/src/app # echo $foo

/usr/src/app #
/usr/src/app # . ~/.profile
Job-/usr/src/app# echo $foo
bar
Job-/usr/src/app#

ご覧のとおり、.profileは機能しますが、Docker環境でAlpine Linuxにログインしても実行されないか、Alpineがログインしても.profileは実行されません。

Alpine Linuxの対話型セッションのための起動スクリプトが何であるかを知っている人はいますか?

または:「docker exec」でログインしたときにDockerが.profileを実行しない理由を知っている人はいますか?

答え1

時間をかけて助けてくれた@terdonに感謝します。

DockerコンテナからAlpine Linuxにログインするときは、次のコマンドを使用して.profileを実行する必要があります。

docker exec -it <containerName> /bin/sh -l

最後に -l を参照してください (ログインの場合は 'l'? :-) )。これにより Alpine シェルが起動します。ログインシェルこれは読み取りを意味/etc/profileするため、~/.profileこのファイルを使用してエイリアスを定義できます。

ただし、Ubuntuコンテナにはこれを必要としません。

答え2

$ENVログイン時に実行するスクリプトのパスに環境変数を設定できます。これにより-l、パラメータとして渡す必要がなくなります/bin/sh

例:

ENV ENV=/root/.ashrc

/root/.ashrc起動時のソースです。

答え3

Alpine Linux Docker コンテナにユーザーとしてログインするには、設定されたログインシェルを使用してください。、使用login -f username

例えば、

docker exec -it mycontainer login -f root

ユーザーが設定したパスワードを使用したい場合は、-fコマンドからパスワードを削除してください。

これにより、ユーザーが設定したログインシェルがログインシェルとして使用されます。〜のようにログインシェル。これは、通常、ログインシェルで実行されると、シェルが読み取るすべてのシェル初期化ファイルを読み取ることを意味します(/etc/zsh/zprofile例:~/.zprofileの場合zsh)。

関連情報