Docker-compose守护进程退出

时间:2015-05-11 08:41:37

标签: playframework docker

所以我将Play框架与Docker一起使用(特别是使用this图像),并尝试启动并运行服务器。

$ sudo docker-compose run web activator run

按预期工作:网络服务器启动并保持接受传入请求。

然后我尝试

$ sudo docker-compose up -d

$ sudo docker-compose logs
...
web_1      | [info]     [SUCCESSFUL ] org.ow2.asm#asm-analysis;4.1!asm-analysis.jar (16ms)
web_1      | [info] downloading file:/activator-1.3.2/repository/org.ow2.asm/asm-util/4.1/jars/asm-util.jar ...
web_1      | [info]     [SUCCESSFUL ] org.ow2.asm#asm-util;4.1!asm-util.jar (32ms)
web_1      | [info] Done updating.
web_1      | 
web_1      | --- (Running the application from SBT, auto-reloading is enabled) ---
web_1      | 
web_1      | [info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
web_1      | 
web_1      | (Server started, use Ctrl+D to stop and go back to the console...)
web_1      | 
web_1      | 
web_1      | [success] Total time: 356 s, completed May 11, 2015 6:44:20 AM
shallwedebate_web_1 exited with code 0
amos@lub:/ShallWeDebate$ sudo docker-compose ps
      Name             Command             State              Ports       
-------------------------------------------------------------------------
shallwedebate_da   /docker-           Up                 5432/tcp         
tabase_1           entrypoint.sh                                          
                   postgres                                               
shallwedebate_we   activator run      Exit 0                              
b_1  

退出!这是为什么?为什么它不像我docker-compose run那样继续运行?

编辑 - 我的docker-compose.yml文件

database:
  image: postgres:9.1
  volumes:
    - /ShallWeDebate/postgres-entrypoint:/docker-entrypoint-initdb.d:ro
  env_file:
    - ./vars.env
web:
  image: ingensi/play-framework
  volumes:
    - /ShallWeDebate:/app:rw
  env_file:
    - ./vars.env
  links:
    - database
  ports:
    - "80:9000"

2 个答案:

答案 0 :(得分:8)

如果您想要一个可在开发模式而非生产模式下使用Play应用的解决方案,则可以将stdin_open: true设置添加到docker-compose.yml文件中:

web:  
  image: brikis98/ping-play
  ports:
    - "9000:9000"
  stdin_open: true

在上面的示例中,brikis98/ping-play图片是默认执行activator run的Play应用。如果我在上面的YAML文件上运行docker-compose up,Play应用程序会启动并继续运行而不是立即退出。

答案 1 :(得分:2)

问题与Play Framework有关。使用activator运行您的应用时,它会尝试附加到stdin,等待Ctrl + D完成应用。 Play Framework现在不支持使用activator命令运行应用程序而不使用stdin。您找到了一种解决方法来实现此功能(从交互式docker容器运行您的应用程序)。可能你可以使用fig hacking一点点工作,分配一些伪tty,但最好的解决方案是Play Framework支持这个功能。有一些与此特定问题相关的问题:typesafehub/activator #939playframework/playframework #4001