2016-11-09 68 views
2

我在OSX上使用碼頭1.12和碼頭構成1.12。無法連接到容器與碼頭構成

我創建了運行兩個集裝箱碼頭工人,compose.yml文件:

  • 第一,命名火花,構建並運行一個應用程序sparkjava
  • 第二,命名的行爲,運行一些功能測試在由第一個容器暴露的API上。

    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" 
    

由於recommended by Docker Compose documentation,我用一個簡單的shell腳本來測試,如果火花服務器已準備就緒。該腳本名稱爲runtest.sh,並運行到名爲「behave」的容器中。它由docker-compose發佈(見上):

#!/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 
``` 

DNS解析似乎不起作用。 curl向spark.com發出請求,而不是對名爲「spark」的容器的請求。

UPDATE:

通過設置一個別名,我的鏈接(links: -spark:myserver),我見過的DNS解析不是由碼頭工人做:我收到一條錯誤消息從公司網絡設備(我使用Docker for Mac從企業代理的後面運行此操作)。下面是輸出的摘錄:

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,我不認爲你需要的'links'條目。 *鏈接允許您定義額外的別名,通過它可以從另一個服務訪問服務。* – R0MANARMY

+0

這不是我在這裏閱讀的:https://docs.docker.com/compose/compose-file/#/links。然而,我嘗試過,但它並沒有解決我的問題。 –

+0

我刪除了我的答案,因爲它不再適用於您編輯的問題。考慮包括腳本輸出的日誌,以及其他命令來測試DNS(例如ping)以將問題隔離到DNS或捲曲。 – BMitch

回答

0

爲了解決這個問題,我增加了一個環境變量no_proxy因爲我想加入容器的名稱。

在dockerfile爲容器的行爲,我有:

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