docker - 如何在 Docker 容器中执行多个命令并使 shell 会话保持打开状态?
问题描述
我有一个正在运行的 Docker 容器,需要在容器内启动交互式 shell 会话,并在此之前执行多个命令。我怎样才能做到这一点?
我试过了
docker exec -it foo bash < my_commands_to_exexute_inside_the_container.sh
和
docker run foo bash -c "echo Foo;echo Bar"
但这些都不起作用。第一个不执行脚本中的命令,第二个执行此操作,但关闭终端会话。
任何想法?顺便说一句:命令应该来自容器外部。容器中没有包含这些命令的文件。
编辑:
以下几乎完全符合我的要求。唯一的问题是第一个命令关闭 shell,第二个命令再次打开它。这导致我丢失环境变量。
docker exec -i foo bash < "cli.sh"
docker exec -it foo bash
有没有办法在不关闭外壳的情况下实现这种行为?
解决方案
在你的第一个命令中删除-t
(你正在运行一个脚本,而不是手动与 shell 提示交互,所以你不需要分配一个 TTY):
docker exec -i foo bash < my_commands_to_exexute_inside_the_container.sh
例如,如果我启动一个 Fedora 容器:
docker run -d --name shell fedora:34 sleep inf
我有一个mycommands.sh
包含以下内容的文件:
echo "The time is $(date)"
echo "This system is: $(uname -a)"
我可以像这样在容器中执行该外壳:
$ docker exec -i shell bash < mycommands.sh
The time is Sat Jul 31 12:37:59 UTC 2021
This system is: Linux 50715db46e9b 5.12.14-300.fc34.x86_64 #1 SMP Wed Jun 30 18:30:21 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
推荐阅读
- cognos - Cognos 单个报告,多个 CSV 页面到单个电子邮件
- java - How to share messages, published on Topic, between multiple VMs, in Spring Jms Tibjms
- react-native - 如何修复未定义不是函数(评估'(0 _reactnavigation.stacknavigator)')
- r - 快速将数据框的几列转换为不同的类
- python - 如果从 cmd 或从 .py 文件运行,包将不起作用.... PYTHON
- c - SIGHUP 信号处理以解除 Unix 系统编程中的命令
- c - 消息不会在服务器端打印 - 套接字
- powershell - Windows PowerShell 当前代码页不断变化
- macros - Clang 编译器错误:预处理器表达式开头的标记无效
- android - ActionBar 菜单 改变图标位置