我正在运行像这样的apache服务器
docker run -d -p 80:80 php:apache /usr/sbin/apache2ctl -D FOREGROUNDD
然后我用
确定容器的名称docker ps
并使用
在容器上执行交互式shelldocker exec -ti hungry_fermi bash
效果很好,但我想在一个命令中做同样的事情。我试过了
docker run -ti -d -p 80:80 php:apache /bin/bash -c 'bash; apache2ctl -D FOREGROUND'
问题是,我没有获得终端并且命令返回。
答案 0 :(得分:2)
你正在尝试这个:
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,等待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就好了。