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
)。