我在docker容器中运行用户应用程序,一切正常,直到我决定使用supervisorctl,以便我可以通过rpc远程启动/停止应用程序。现在我需要一种方法来阻止用户的应用程序反省容器,发现supervisord.conf&记录和/或执行supervisord / supervisorctl bin。
这样做的方法是使用chroot,但我不清楚如何做到这一点。
阅读uwsgi的文档,只需运行
即可mkdir -p /ns/001
debootstrap maverick /ns/001
chroot /ns/001
# in the chroot jail now
adduser uwsgi
apt-get install mercurial python-flask
su - uwsgi
# as uwsgi now
git clone https://github.com/unbit/uwsgicc.git .
exit # out of su - uwsgi
exit # out of the jail
Now on your real system run
uwsgi --socket 127.0.0.1:3031 --chdir /home/uwsgi/uwsgi --uid uwsgi --gid uwsgi --module uwsgicc --master --processes 4 --namespace /ns/001:mybeautifulhostname
让uwsgi在chroot容器中运行。
PHP-FPM似乎也有类似的配置选项,你必须设置
prefix = /var/www/example.com
chroot = $prefix
chdir = /
listen = tmp/php5-fpm.sock
slowlog = log/$pool.log.slow
我不确定是否需要在容器中运行debootstrap。另外,我不明白uwsgi的例子;他们在chroot外面运行uwsgi bin,你不需要在chroot中安装uwsgi,然后在chroot外面的supervisord.conf中有/ ns / 001 / usr / bin / uwsgi这样的东西吗?
我似乎无法找到运行chroot和atm的单一标准方法,所以我考虑运行类似于
的设置RUN set -e;
apk add --no-cache supervisor;
mkdir -p /ns/001;
debootstrap alpine /ns/001;
chroot /ns/001;
# in the chroot jail now
# install all my packages here, all the stuff that was in the container apk add --no-cache everything
before gets moved here
# exit the chroot
in my superisord.conf then just specify /ns/001/path/to/bins/in/chroot
以上是否可行?
我想我也看过只使用php-fpm和uwsgi的chdir
选项的示例,这是否可以避免设置chroot环境?并且非常简单地阻止过程,例如。看到chroot dir以外的蟒蛇?
chroot是否也会限制该进程看到的env变量?