2015-05-11 5 views
4

Итак, я использую платформу Play с Docker (в частности, используя изображение this) и пытаюсь запустить сервер.Docker-compose daemon

Doing

$ 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 
[email protected]:/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?

EDIT - Мой 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" 
+0

Пожалуйста, вы можете разместить свой 'docker-compose.yml' (или используемый yml)? –

+0

@JavierCortejoso сделано, это помогает? – wrongusername

ответ

2

Проблема связана с Play Framework. При запуске приложения с activator он пытается подключиться к stdin, ожидая Ctrl + D, чтобы закончить приложение. Запуск приложения с помощью команды activator и без stdin теперь не поддерживается Play Framework. Вы нашли обходной путь, чтобы получить эту работу (запуск вашего приложения из интерактивного контейнера докеров). Вероятно, вы могли бы заставить его работать с небольшим взломом фишек, выделяя какой-то псевдо-tty, но лучшим решением будет поддержка Play Framework этой функции. Есть некоторые вопросы, связанные с этой конкретной проблемой: typesafehub/activator #939, playframework/playframework #4001

+0

Похоже, что запуск Play в режиме производства также устраняет эту проблему. Благодаря! – wrongusername

8

Если вы хотите решения, которое работает с приложением Play в режиме разработки, а не режим производства, вы можете добавить параметр stdin_open: true в файл docker-compose.yml:

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

В приведенном выше примере изображение brikis98/ping-play - это приложение для воспроизведения, которое по умолчанию выполняет activator run. Если я запустил docker-compose up в файле YAML выше, приложение Play загрузится и продолжит работу вместо немедленного выхода.