Docker:如何在一个命令中运行一个服务和一个terminal?
我正在运行这样的Apache服务器
docker run -d -p 80:80 php:apache /usr/sbin/apache2ctl -D FOREGROUNDD
然后我确定容器的名字
docker ps
并在容器上执行交互式shell
docker exec -ti hungry_fermi bash
它运作良好,但我想在同一个命令。 我试过了
docker run -ti -d -p 80:80 php:apache /bin/bash -c 'bash; apache2ctl -D FOREGROUND'
问题是,我没有获得一个terminal,命令返回。
你正在尝试这个:
docker run -ti -d -p 80:80 php:apache \ /bin/bash -c 'bash; apache2ctl -D FOREGROUND'
这里有几个问题。 首先,使用-d
命令行选项,要求docker客户端分离并保持容器运行。 使用-d
时,您将永远不会获得交互式shell。
其次,你的命令 – bash; apache2ctl -D FOREGROUND
bash; apache2ctl -D FOREGROUND
– 将运行bash,等待bash退出,然后运行httpd
。 你可以改为做这样的事情:
docker run -ti -p 80:80 php:apache \ /bin/bash -c 'apachectl start; bash'
这将在后台启动Apache(因为没有-D FOREGROUND
),然后开始bash …但是我不是很清楚为什么你会这样做,因为现在如果你要退出你的shell的容器也会退出(以Apache为例)。
我觉得你现在简单地启动Apache,然后使用docker exec
在容器中获得一个shell。