2016-02-18 8 views
7

Ich arbeite an der Einrichtung eines dockerisierten Selen-Gitters. Ich kann meine Python-Tests [run with pytest] aus einem Pytest-Container [siehe unten] senden, indem ich daran anschließe. Aber ich habe einen anderen LAMP-Container eingerichtet, der Pytest steuern wird. Also ich möchte den Pytest-Container eigenständig machen, im Leerlauf laufen und auf Befehle vom LAMP-Container warten.Führen Sie py.test in einem Andock-Container als Dienst aus.

Ich habe diese Dockerfile:

# Starting from base image 
FROM ubuntu 

#----------------------------------------------------- 
# Set the Github personal token 
ENV GH_TOKEN blablabla 

# Install Python & pip 
RUN apt-get update 
RUN apt-get upgrade -y 
RUN apt-get install -y python python-pip python-dev && pip install --upgrade pip 

# Install nano for #debugging 
RUN apt-get install -y nano 

# Install xvfb 
RUN apt-get install -y xvfb 

# Install GIT 
RUN apt-get update -y && apt-get install git -y 

# [in the/folder] 
RUN git clone https://$GH_TOKEN:[email protected]/user/project.git /project 

# Install dependencies via pip 
WORKDIR /project 
RUN pip install -r dependencies.txt 
#----------------------------------------------------- 

# 
CMD ["/bin/bash"] 

ich starten Sie den pytest Behälter manuell [für Entwicklung] mit diesem:

docker run -dit -v /project --name pytest repo/user:py 

Die Sache ist, dass ich fertig Entwicklung und ich möchte die pytest haben Container gestartet von docker-compose und verbinden Sie es mit anderen Containern [mit Link und Volume]. Ich kann es einfach nicht schaffen, aufzustehen.

ich verwendet, um dieses:

pytest: 
    image: repo/user:py 
    volumes: 
    - "/project" 
    command: "/bin/bash tail -f /dev/null" 

aber nicht funktioniert hat.

Also, in der Dockerfile, sollte ich eine bestimmte CMD oder ENTRYPOINT?

Sollte ich einige command aus der docker-compose-Datei?

+0

Ihr docker run hat '-dit' das ist seltsam, es ist entweder d oder es, nicht beide, und ja Ihre Dockerfile sollte eine CMD oder ENTRYPOINT haben – user2915097

+0

Ich startete es zuerst mit -dit, damit ich die Konsole frei habe, und dann startete ich mit einem anderen Container, der davon abhängig war, dass der erste oben war. Ich weiß, dass es doch hätte sein sollen, was der enthaltene Befehl wäre, es weiter zu machen? –

+1

Was @ user2915097 bedeutet, denke ich, ist, dass Sie nicht 'it', nur' -d' benötigen, um den Container als Daemon-Prozess (Hintergrund) auszuführen. Das '-it' ist nützlich, um den Container interaktiv auszuführen und ein' tty' zuzuweisen. – Auzias

Antwort

1

Ich bin nicht ganz sicher, wie die Tests durchführen, aber ich denke, ich habe einen ähnlichen Anwendungsfall. Sie können sehen, wie ich das in meinem Envoy project in cmd.sh und a sample test mache.

Hier ist, wie ich meine Tests laufen. Ich verwende pytest auch, das ist aber nicht so wichtig: 1. Verwendung Docker-compose den Stapel zu bringen, ohne die Tests 2. Warten auf den Stapel für Anforderungen bereit zu sein. Für mich bedeutet dies Umfrage für eine 200 Antwort 3. Führen Sie den Test-Container getrennt, aber stellen Sie sicher, dass es das gleiche Netzwerk wie den Compose-Stack verwendet.

Dies kann auf verschiedene Arten erfolgen. Sie können dies alles in ein Bash-Skript einfügen und alles von Ihrem Host aus steuern.

In meinem Fall habe ich das alles aus einem Python-Containern. Es ist ein wenig um den Kopf herum, aber die Idee ist, gibt es einen Python-Test-Container, den der Host startet. Dann verwendet der Container compose, um den Stack auf den Host zurückzusetzen (dockerception). Und dann führen wir im Testbehälter den Pytest durch. Wenn es fertig ist, komponiert es den Stapel nach unten und drückt den Rückkehrcode hoch.

Verwandte Themen