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修复它。