Alpine Linux 登录时的启动脚本是什么?(我登录时需要我的别名)

Ber*_*rtC 6 startup bash docker alpine-linux

对于 Docker 容器,我们使用 Alpine Linux,例如 Node:Alpine,以使我们的镜像尽可能小。但有时您想登录该容器。将您的别名放在该容器中会很方便。

当我们使用标准 Linux 时,我们将 .bashrc 映射到 /root/.bashrc 并让所有别名可用。

但我找不到 Alpine Linix 的 .bashrc 等效项。

我试过了:

  • .bashrc
  • .bash_配置文件
  • 。轮廓
  • .ash_profile
  • .ashrc

全部不工作。

附加信息

Alpine Linux 在 Docker 容器中启动。

Dockerfile

FROM node:alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/build .
Run Code Online (Sandbox Code Playgroud)

登录容器

我从主机(我的 OSX macbook)使用以下命令

FROM node:alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY --from=builder /usr/src/app/build .
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

docker exec -it <containerName> /bin/sh
Run Code Online (Sandbox Code Playgroud)

启动容器:

  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"]
Run Code Online (Sandbox Code Playgroud)

在容器中

当我进入容器时

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

然后是注释中请求的命令的输出:

docker exec -it <containername> /bin/sh
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯-EF

我想“ps -ef”的输出也很有趣:

/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 #
Run Code Online (Sandbox Code Playgroud)

它显示了 sh shell(正确吗?)。但是/bin/sh启动不起作用。

辅助 | grep $$

/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
Run Code Online (Sandbox Code Playgroud)

/bin/sh 是一个链接

/usr/src/app # ps aux | grep $$
   19 root      0:00 /bin/sh
   26 root      0:00 grep 19
Run Code Online (Sandbox Code Playgroud)

小测试改变.profile

/usr/src/app # ls -la /bin/sh
lrwxrwxrwx    1 root     root            12 Apr 14 10:25 /bin/sh -> /bin/busybox
Run Code Online (Sandbox Code Playgroud)

如您所见,.profile 确实有效,只是在 Docker 环境中登录 Alpine Linux 时不执行它,或者 Alpine 在登录时不执行 .profile。

有谁知道 Alpine Linux 上交互式会话的启动脚本是什么?

或者:有谁知道为什么 Docker 在从“docker exec”登录时不执行 .profile。

Ber*_*rtC 5

非常感谢@terdon 的时间和帮助。

当在 Docker 容器中登录 Alpine Linux 时,需要使用以下命令来执行 .profile:

docker exec -it <containerName> /bin/sh -l
Run Code Online (Sandbox Code Playgroud)

请注意末尾的 -l ('l' 表示登录?:-) )。这使得 Alpine shell 启动一个登录 shell,这意味着它读取/etc/profile~/.profile,因此我可以使用这些文件来定义我的别名。

不过 Ubuntu 容器不需要它。