2016-10-30 23 views
1

ローカルマシン(Mac)でsqlvmというレガシー仮想マシンを使用しています(http://sqlvm :)を介してローカルホストからこのVMにアクセスできます。 これで、vmに接続する必要がある同じローカルホスト(私のMac)にいくつかのドッカーコンテナ(ドッカーの作成を使用)をセットアップしました。 pymysqlは、例外を発生させる:ドッカーコンテナからホストの仮想マシンにアクセス

OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on 'sqlvm' ([Errno -2] Name or service not known)") None None 

どのように私は、内部ドッキングウィンドウのネットワークへの外部からの「sqlvm」を公開することができますか?

EDIT:

ERROR: for defaultworker Cannot create container for service defaultworker: Conflicting options: host type networking can't be used with links. This would result in undefined behavior 

私は両方と通信するための容器を必要とする:私はYMLファイル 内の関連するコンテナのnet: "host"を追加し、(docker-compose up上)次のエラーを取得しようとしました '外' と '内の' ネットワーク..

ドッキングウィンドウ-compose.yml:

recommendation-rabbit: 
    image: rabbitmq:3-management 
    hostname: my-rabbit 
    ports: 
    - "8080:15672" 
    - "5672:5672" 
    command: bash -c "rabbitmq-server start" 
defaultworker: 
    image: rcom-worker 
    hostname: rcom-worker-host 
    environment: 
    - CELERY_BROKER_URL=amqp://user:[email protected]:5672 
    command: bash -c "celery worker -A app -l info -Q default -c 2 -n defaultworker -Ofair" 
    links: 
    - recommendation-rabbit:rabbit 
    net: "host" 
+0

どのような種類のネットワークモードでVMを使用していますか?例えば。ブリッジ、ホストなど –

+0

NATとして設定されていると思います – ItayB

+0

@GIRISHRAMNANIなぜあなたはあなたの答えを削除しましたか?どうかお元気ですか? – ItayB

答えて

1

すぐに回避するには、フラグ--net=hostを持つすべてのコンテナを実行できます。これは、ドッカーコンテナがホストネットワークインターフェイスを使用することを意味します。ドッカーネットワークの詳細については、hereをご覧ください。

vmでも同じことができます。今ではvmとドッカーのコンテナは同じネットワークインターフェイスを持つため、pymysqlが動作します。

これを行う方法は他にもあります。

EDIT - --net=hostを使用している場合、ホストネットワークインターフェイスにアクセスでき、コンテナ間にコマンドインターフェイスが既に存在するため、リンクする必要はありません。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
    inet 127.0.0.1/8 scope host lo 
     valid_lft forever preferred_lft forever 
    inet6 ::1/128 scope host 
     valid_lft forever preferred_lft forever 
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 
    link/ether a0:48:1c:10:43:97 brd ff:ff:ff:ff:ff:ff 
3: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 
    link/ether fc:4d:d4:50:23:04 brd ff:ff:ff:ff:ff:ff 
    inet 192.168.1.107/24 brd 192.168.1.255 scope global wlan1 
     valid_lft forever preferred_lft forever 
    inet6 fe80::fe4d:d4ff:fe50:2304/64 scope link 
     valid_lft forever preferred_lft forever 
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:c8:46:60:1c brd ff:ff:ff:ff:ff:ff 
    inet 172.17.0.1/16 scope global docker0 
     valid_lft forever preferred_lft forever 
    inet6 fe80::42:c8ff:fe46:601c/64 scope link 
     valid_lft forever preferred_lft forever 

これは私のように見えます。ホストマシンのネットワークインターフェースであるwlan1が存在することがわかります。 vmはmysqlサーバのポートをホストマシンに公開する必要があります。ホストを使用してアクセスできる場合は、コンテナを使用してアクセスできます。

+0

を助けてくれるのですが、 ' - net = host'を' docker compose up'権利に追加することはできません。 – ItayB

+0

docker-compose.ymlファイル内でどのように達成できますか? – ItayB

+1

https://docs.docker.com/compose/compose-file/#netがそれを行う必要があります。 –

関連する問題