2017-06-12 3 views
0

Ich erstelle einen Algorithmus, der auf einem Server ausgeführt werden muss, zusammen mit einer kleinen Datenbank.Docker-komponieren mit Urwid (Ncurses) Python App

Andockfensters-compose.yml:

version: '3' 
services: 
    app: 
    command: python -u app.py 
    build: . 
    stdin_open: true 
    db: 
    image: mongo:latest 

Dockerfile:

FROM python:3.6.1 

COPY . /usr/src/app 

WORKDIR /usr/src/app 

RUN pip install -r requirements.txt 

Die App ist eine ncurses (urwid) App die das Endgerät in einen TUI transformiert den Algorithmus zu überwachen. Wenn ich die App separat auf meinem Laptop laufe, funktioniert es wie erwartet, das Terminal wird zur TUI. Wenn mit dem Befehl "docker-compose up" ausgeführt wird, zeigt das Terminal zunächst stdout von docker und mongo an, nach dem bestimmte (abgeschnittene) Teile der TUI angezeigt werden. Die TUI-Komponenten sind fehlerhaft und reagieren nicht. Wenn der Andockvorgang beendet wird, bleiben die abgeschnittenen Teile im Terminal.

Möglicher Hinweis: Die TUI enthält eine laufende Uhr mit Stunden: min: sek. Wenn die abgeschnittenen Teile erscheinen, ist die Uhr korrekt, aber sie friert sofort ein. Die Uhr wird durch eine zugrundeliegende asyncio Ereignisschleife aktualisiert.

Antwort

0

Dies funktioniert für mich:

Docker-compose.yml

version: '3' 
services: 
    app_db: 
    container_name: appDB 
    image: mongo:latest 

    app: 
    command: python -u /usr/src/app/app.py 
    container_name: app 
    build: . 
    links: 
    - app_db 
    stdin_open: true 
    tty: true 

Beim Laufen Docker-compose Lauf App sowohl die App und der Mongo Behälter laufen und ich bekomme eine Terminal-Schnittstelle in den App-Container.