Docker容器间通讯

问题描述

在这里面临一个相对简单的问题,但我开始怀疑为什么它不起作用。

我想用Docker Compose启动两个Docker容器:InfluxDB和Chronograph。

不幸的是,计时码表无法以给定的主机名到达InfluxDB:“无法连接到InfluxDB Influx 1:错误地联系了来源”

这可能是什么原因?

这是我的 docker-compose.yml

add_action( 'wp_enqueue_scripts','my_scripts' );

我还尝试在两个容器中启动一个shell,然后将这些容器彼此ping或使用wget获取一个容器的HTTP-API。即使容器之间的这种通信也不起作用。在尝试wget和ping的过程中,我都超时了。

必须说,我在这里使用Banana Pi BPI-M1。是否有可能由于Linux而导致容器到容器的通信不起作用?

解决方法

如果未配置,chronograf将尝试访问localhost:8086上的influxdb。为了能够访问正确的influxdb实例,您需要使用--influxdb-url命令行标志或(个人喜好)环境变量INFLUXDB_URL来相应地指定url。应当将这些值设置为http://influxdb:8086的值,该值是从您的撰写文件的服务名称(位于services下一层的键)派生的docker DNS名称。

这应该可以解决问题(摘要):

  chronograf:
    image: chronograf
    restart: unless-stopped
    ports:
      - 8888:8888
    volumes:
      - chronograf-volume:/var/lib/chronograf
    environment:
      - INFLUXDB_URL=http://influxdb:8086
    depends_on:
      - influxdb
    networks:
      - test

请检查chronograf readme使用带有InfluxDB的容器部分)以获取有关配置映像的详细信息,并检查the docker compose networking docs有关网络和dns命名的更多信息。 / p>

,

Docker服务在表filter和nat中创建一些iptables条目。我的OpenVPN Gateway脚本在启动时执行了以下命令:

if($projectTaskIds && count($projectTaskIds)){

    $realTime = 0;
    $estimateCost = 0;
    $itemName = '';
    $realCost = 0;
    $realCostArr = array();
    $totalCalEArr = array();

    foreach ($projectTaskIds as $key => $projectTaskId) {

        // echo $projectTaskId['id'];
        // echo "<br>";
        $calB = 0;
        $calC = 0;
        
        $itemtotal = 0;
        $items = get_items_by_type('task',$projectTaskId['id']);
        if($items && count($items) > 0){
            $itemNo = 1;
            foreach ($items as $key => $item) {
                $itemtotal += ($item["rate"]*$item["qty"]);
                $itemName .= '<div>'.$itemNo.'.'.$item["description"].' <b>('.round($item["qty"]).')</b>'.'</div>';
                $itemNo++;
            }
        }
            
        // =============== the code that doesn't work ============
        $calF = get_task_user_hourly_rate($assignees_id[0]); // hourly_rate
        $calG = get_task_custom_billable_amount($aRow['id']);
             
        if($aRow['task_item_percentage']){
            $calE = ((round($itemtotal + ((($calF * $aRow['task_duration'] / 60))))*($aRow['task_item_percentage']/100)))+(round($itemtotal + (($calF * $aRow['task_duration'] / 60)))); // additionalPriceTotal
         
        }
        else {
            $calE = ($itemtotal+$aRow['task_item_manual_total_price']-$itemtotal);
        }
        $totalCalE = $calE;
        $totalCalEArr[] = $totalCalE;
        
        if($totalCalEArr && count($totalCalEArr) > 0){
            $totalsCalEaMount = 0;
            foreach ($totalCalEArr as $key => $totalvalue) {
                $totalsCalEaMount += $totalvalue;
            }
        }
        // =============== the code that doesnt work ============

        $realTime += get_calc_task_real_logged_time($projectTaskId['id']);
        $calB = get_task_custom_billable_amount($projectTaskId['id']);
        
        if($aRow['task_item_percentage']){
            $calC = ((round($itemtotal + ((($calF * $aRow['task_duration'] / 60))))*($aRow['task_item_percentage']/100)))+(round($itemtotal + (($calF * $aRow['task_duration'] / 60)))); // additionalPriceTotal
        } else {
            $calC = ($itemtotal+$aRow['task_item_manual_total_price']-$itemtotal);
        }

        $estimateCost += round($itemtotal+($calA * $aRow['task_duration'] / 60)); 
        $realCost = round($itemtotal+$calB);
        
//           if($calC = 0){  $realCost = round($itemtotal+$calB);} else { $realCost = round($itemtotal+$calB+$calC);
// }
        $realCostArr[] = $realCost;

    }
    if($realCostArr && count($realCostArr) > 0){
        $realCostAmount = 0;
        foreach ($realCostArr as $key => $reslcostvalue) {
            $realCostAmount += $reslcostvalue;
        }
    }
}

$outputName = '';
$relName = '';
$row[] = $loop;

if ($aRow['rel_name']) {
    $relName = task_rel_name($aRow['rel_name'],$aRow['rel_id'],$aRow['rel_type']);
    $link = task_rel_link($aRow['rel_id'],$aRow['rel_type']);
    $relName = '<span class="hide"> - </span><a class="text-muted task-table-related" data-toggle="tooltip" title="' . _l('task_related_to') . '" href="' . $link . '">' . $relName . '</a>';
}

$row[] = $relName;
$row[] = count($projectTaskIds);
$row[] = $itemName;
$row[] = $aRow['task_duration']*count($projectTaskIds);
$row[] = round($realTime/60);
$row[] = round($estimateCost);
$row[] = round($realCostAmount);
$row[] = '';
$row[] = $totalCalEArr; // display as array or $row[] = $totalsCalEaMount; to display as a sum
$output['aaData'][] = $row;
$loop++;
}

这将从Docker中删除条目,并且容器与Internet之间的通信将不再可能。

我已经重写了脚本,现在一切又可以正常工作了。