我的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连接到这些容器中的任何一个。
这基本上是有效的。唯一的问题是,这些服务容器中的许多将在内部运行开发进程,例如nodemon
、ng 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#