2016-11-09 4 views
2

Ich verwende Docker 1.12 und Docker-Compose 1.12, unter OSX.kann keine Verbindung zum Container herstellen mit docker-compose

ich eine Docker-compose.yml-Datei erstellt, die zwei Container läuft:

  • der erste, mit dem Namen Funke, baut und betreibt eine sparkjava Anwendung
  • die zweite, mit dem Namen verhalten, läuft einige Funktionstests auf der API, die vom ersten Container bereitgestellt wird.

    version: "2" 
    
    services: 
    
    behave: 
        build: 
         context: ./src/test 
        container_name: "behave" 
        links: 
         - spark 
        depends_on: 
         - spark 
        entrypoint: ./runtests.sh spark:9000 
    
    spark: 
        build: 
         context: ./ 
        container_name: "spark" 
        ports: 
         - "9000:9000" 
    

Als recommended by Docker Compose documentation, verwende ich einen einfachen Shell-Skript zu testen, ob der Funke-Server bereit ist. Dieses Skript hat den Namen runtest.sh und wird in den Container "benehmen" geschrieben. Es wird von docker-compose gestartet (siehe oben):

#!/bin/bash 

# This scripts waits for the API server to be ready before running functional tests with Behave 
# the parameter should be the hostname for the spark server 
set -e 

host="$1" 
echo "runtests host is $host" 

until curl -L "http://$host"; do 
    >&2 echo "Spark server is not ready - sleeping" 
    sleep 5 
done 

>&2 echo "Spark server is up - starting tests" 
behave 
``` 

Die DNS-Auflösung scheint nicht zu funktionieren. curl stellt eine Anfrage an spark.com statt einer Anfrage an meinen Container namens "spark".

UPDATE:

Durch einen Alias ​​für meine Linksetzung (links: -spark:myserver), habe ich die DNS-Auflösung von Docker nicht getan gesehen: Ich habe eine Fehlermeldung von einem Firmennetzwerk Ausrüstung erhalten (ich bin Führen Sie dies hinter einem Unternehmens-Proxy, mit Docker für Mac). Hier ein Auszug der Ausgabe:

Recreating spark 
Recreating behave 
Attaching to spark, behave 
behave | runtests host is myserver:9000 
behave | % Total % Received % Xferd Average Speed Time Time  Time Current 
behave |         Dload Upload Total Spent Left Speed 
100 672 100 672 0  0 348  0 0:00:01 0:00:01 --:--:-- 348 
behave | <HTML><HEAD> 
behave | <TITLE>Network Error</TITLE> 
behave | </HEAD> 
behave | <BODY> 
behave | ... 
behave | <big>Network Error (dns_unresolved_hostname)</big> 
behave | Your requested host "myserver" could not be resolved by DNS. 
behave | ... 
behave | </BODY></HTML> 
behave | Spark server is up - starting tests 
+1

FWIW, ich glaube nicht, dass Sie das 'links' Eintrag benötigen. * Links ermöglichen es Ihnen, zusätzliche Aliase zu definieren, mit denen ein Dienst von einem anderen Dienst erreichbar ist. * – R0MANARMY

+0

Es ist nicht, was ich hier lese: https://docs.docker.com/compose/compose-file/#/links. Ich habe es versucht, aber es hat mein Problem nicht gelöst. –

+0

Ich habe meine Antwort gelöscht, da sie für Ihre bearbeitete Frage nicht mehr gilt. Erwägen Sie, Protokolle Ihrer Skriptausgabe und andere Befehle zum Testen von DNS (z. B. Ping) einzubeziehen, um das Problem entweder auf DNS oder auf Locken zu beschränken. – BMitch

Antwort

0

Um dies zu lösen, habe ich eine Umgebungsvariable no_proxy für den Namen des Containers ich anschließen wollte.

Im dockerfile für den Container verhalten, ich habe:

ENV http_proxy=http://proxy.mycompany.com:8080 
ENV https_proxy=http://proxy.mycompany.com:8080 
ENV no_proxy=127.0.0.1,localhost,spark 
Verwandte Themen