Docker-compose 守护进程正在退出
Docker-compose daemon exiting
所以我将 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"
问题与Play Framework有关。当 运行 你的应用 activator
时,它会尝试附加到标准输入,等待 Ctrl+D 完成应用。 运行 Play Framework 目前不支持带有 activator
命令但没有标准输入的应用程序。您找到了解决此问题的方法(运行 您的应用来自交互式 docker 容器)。也许你可以让它与 fig hacking 一起工作,分配一些伪 tty,但最好的解决方案是 Play Framework 支持这个功能。有一些与此特定问题相关的问题:typesafehub/activator #939, playframework/playframework #4001
如果您想要一个在开发模式而非生产模式下与 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 应用程序启动并保持 运行ning 而不是立即退出。
所以我将 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"
问题与Play Framework有关。当 运行 你的应用 activator
时,它会尝试附加到标准输入,等待 Ctrl+D 完成应用。 运行 Play Framework 目前不支持带有 activator
命令但没有标准输入的应用程序。您找到了解决此问题的方法(运行 您的应用来自交互式 docker 容器)。也许你可以让它与 fig hacking 一起工作,分配一些伪 tty,但最好的解决方案是 Play Framework 支持这个功能。有一些与此特定问题相关的问题:typesafehub/activator #939, playframework/playframework #4001
如果您想要一个在开发模式而非生产模式下与 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 应用程序启动并保持 运行ning 而不是立即退出。