在Linux Alpine docker容器中自定义shell启动



我的Dockerfile

FROM node:lts-alpine
RUN echo echo Hi Bob >> /etc/profile

运行

docker build -t node5 .
docker run -it --rm node5 sh

我期待着看到";嗨,鲍勃"在端子中输出。它不在那里。

如何在这个发行版上打开终端时自动运行命令?

更新1

我也试过了。没有快乐。

RUN echo echo HI Bob >> /root/.profile

更新2

根据Joe Perri的链接,我发现这使用工作

docker run -it --rm node5 sh -l

因此,它只需要将终端配置为登录控制台即可工作。

但是,在VsCode中使用以下.devcontainer.json配置打开与dev容器相同的容器仍然失败。

{
"build": {
"dockerfile": "./Dockerfile"
},
"userEnvProbe": "loginShell"
}

我的动机是,我试图构建一个项目,这样我就可以使用docker-compose up在Docker容器中旋转一堆服务,然后也可以使用VsCode连接到这些容器中的任何一个。

这基本上是有效的。唯一的问题是,这些服务容器中的许多将在内部运行开发进程,例如nodemonng serve等,并且当VsCode连接到容器ok时,它不会将其终端连接到已经运行开发进程的实例。

我试图通过在tmux会话中启动原始开发进程来连接这一点,然后在VsCode连接到容器时自动运行一个命令来重新连接到该tmux会话。如果我手动重新连接到会话,这会很好,唯一的问题是当VsCode连接到容器时,我无法让它运行自动重新连接会话的命令(或任何其他命令(。

RUN在创建docker镜像时运行,该镜像在容器是CMD中运行。因此:

FROM node:lts-alpine
CMD ["echo", "Hi Bob"]

Hi Bob将在终端中打印。您的Dockerfile只是在docke图像中生成文本文件。

使用bash怎么样?

FROM node:lts-alpine
RUN apk add bash
RUN echo echo Hi Bob >> /etc/profile

然后

docker build -t node5 .
docker run -it --rm node5 bash
Hi Bob
bash-5.0#

最新更新