214

ホストによって Docker コンテナー アクセス ポートを開くことは可能ですか? 具体的には、ホストで MongoDB と RabbitMQ を実行しており、Docker コンテナーでプロセスを実行して、キューをリッスンし、(オプションで) データベースに書き込みたいと考えています。

ポートをコンテナーからホストに転送し (-p オプションを使用)、Docker コンテナー内から外の世界 (つまりインターネット) に接続できることはわかっていますが、RabbitMQ および MongoDB ポートを公開したくありません。ホストから外の世界へ。

編集:いくつかの明確化:

Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT     STATE SERVICE
6311/tcp open  unknown

joelkuiper@vps20528 ~ % docker run -i -t base /bin/bash
root@f043b4b235a7:/# apt-get install nmap
root@f043b4b235a7:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway

Starting Nmap 6.00 ( http://nmap.org ) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT     STATE    SERVICE
6311/tcp filtered unknown
MAC Address: E2:69:9C:11:42:65 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds

コンテナーとのインターネット接続を取得するには、このトリックを実行する必要がありました:私のファイアウォールは、docker コンテナーから外部へのネットワーク接続をブロックしています

編集:最終的に、パイプワークを使用してカスタムブリッジを作成しサービスがブリッジIPでリッスンするようにしました。MongoDB と RabbitMQ が Docker ブリッジでリッスンする代わりに、このアプローチを採用しました。柔軟性が向上するからです。

4

7 に答える 7

12

ssh トンネルを作成することもできます。

docker-compose.yml:

---

version: '2'

services:
  kibana:
    image: "kibana:4.5.1"
    links:
      - elasticsearch
    volumes:
      - ./config/kibana:/opt/kibana/config:ro

  elasticsearch:
    build:
      context: .
      dockerfile: ./docker/Dockerfile.tunnel
    entrypoint: ssh
    command: "-N elasticsearch -L 0.0.0.0:9200:localhost:9200"

docker/Dockerfile.tunnel:

FROM buildpack-deps:jessie

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive \
    apt-get -y install ssh && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY ./config/ssh/id_rsa /root/.ssh/id_rsa
COPY ./config/ssh/config /root/.ssh/config
COPY ./config/ssh/known_hosts /root/.ssh/known_hosts
RUN chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/config && \
    chown $USER:$USER -R /root/.ssh

config/ssh/config:

# Elasticsearch Server
Host elasticsearch
    HostName jump.host.czerasz.com
    User czerasz
    ForwardAgent yes
    IdentityFile ~/.ssh/id_rsa

このようにしelasticsearchて、実行中のサービス (Elasticsearch、MongoDB、PostgreSQL) を使用してサーバーへのトンネルが作成され、そのサービスでポート 9200 が公開されます。

于 2016-07-07T07:53:31.693 に答える
7

DockerコンテナからLDAPサーバーにアクセスする際にも同様の問題がありました。コンテナに固定 IP を設定し、ファイアウォール ルールを追加しました。

docker-compose.yml:

version: '2'
services:
  containerName:
    image: dockerImageName:latest
    extra_hosts:
      - "dockerhost:192.168.50.1"
    networks:
      my_net:
        ipv4_address: 192.168.50.2
networks:
  my_net:
    ipam:
      config:
      - subnet: 192.168.50.0/24

iptables ルール:

iptables -A INPUT -j ACCEPT -p tcp -s 192.168.50.2 -d $192.168.50.1 --dport portnumberOnHost

コンテナ内アクセスdockerhost:portnumberOnHost

于 2017-06-15T14:16:28.277 に答える