docker运行从脚本分离,而不杀死容器
我有一个包含这一行的脚本:
fgrep -m 1 'PostgreSQL init process complete' <( docker run --name test-postgres-migration \ -a STDOUT -p 5432:5432 postgres:9.4 )
但是,即使我将其更改为:
fgrep -m 1 'PostgreSQL init process complete' <( docker run --name test-postgres-migration \ -a STDOUT -p 5432:5432 postgres:9.4 </dev/null )
要么:
fgrep -m 1 'PostgreSQL init process complete' <( docker run --name test-postgres-migration \ -a STDOUT -p 5432:5432 postgres:9.4 </dev/null ) </dev/null
或者甚至当我把整个行放在一个单独的shell脚本中,并将其包装在nohup
:
nohup ./boot-container.sh
docker容器仍然死亡,如果脚本在后面的行中被杀死(通过emacs)。 发生这种情况是因为docker client命令仍然在运行,即使它的PID为1,但由于某些神秘的原因(也许是由于共享的stdin文件句柄 或tty ),当脚本死亡时,它也会被杀死,转动导致docker集装箱已经开始死亡。 我怎样才能防止这个?
在这种情况下,即使nohup
是不够的 – 有必要使用setsid
:
fgrep -m 1 'PostgreSQL init process complete' <( setsid docker run --name test-postgres-migration \ -a STDOUT -p 5432:5432 postgres:9.4 )
这解决了我在Linux上的问题 – 我没有validation问题是否出现在Mac或Unix上,或者这个非官方端口的setsid到Mac和其他Unixes修复它。