2017-12-01 14 views
0

2つのドッカーコンテナを同じ物理ホスト上で実行しています。 OneはMySQLサーバーを実行します。他のコンテナからそのMySQLサーバに接続したいと思います。私は2個のコンテナをリンクし、私がしようとすると接続:docker:1つのコンテナから別のコンテナへMySQLに接続する

mysql -h 172.17.0.3 -u root -p 

、それはで失敗:私は罰金接続できるMySQLを実行しているコンテナに行けば

ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.3' (111) 

私は、同じ問題を抱えている人々と多くの、多くの投稿を見てきましたが、それらの回答は私を助けませんでした。

他のポート上の他のサービスと同じ2つのコンテナ間で同じことを行い、それらはすべて機能します。

私はこれを取得ポートでnmapの実行:

PORT  STATE SERVICE 
3306/tcp closed mysql 

一方、私が得る仕事他のサービスのために:

PORT  STATE SERVICE 
5820/tcp open unknown 

私はコンテナ走行MySQLの上でtcpdumpを実行した場合(172.17 .0.3)他のコンテナ(172.17.0.4)から接続しようとしました。私はこれを見ます:

15:52:57.048838 IP 172.17.0.4.47550 > 91fa9dcbc2a9.mysql: Flags [S], seq 3355905714, win 29200, options [mss 1460,sackOK,TS val 890919597 ecr 0,nop,wscale 7], length 0 
15:52:57.048874 IP 91fa9dcbc2a9.mysql > 172.17.0.4.47550: Flags [R.], seq 0, ack 3355905715, win 0, length 0 
15:52:57.050627 IP 91fa9dcbc2a9.47225 > 192.168.10.3.domain: 14265+ PTR? 4.0.17.172.in-addr.arpa. (41) 
15:52:57.064719 IP 192.168.10.3.domain > 91fa9dcbc2a9.47225: 14265 NXDomain 0/0/0 (41) 
15:52:57.064933 IP 91fa9dcbc2a9.39489 > 192.168.10.3.domain: 28024+ PTR? 3.10.168.192.in-addr.arpa. (43) 
15:52:57.077012 IP 192.168.10.3.domain > 91fa9dcbc2a9.39489: 28024 NXDomain 0/0/0 (43) 

Firewalはありませんホスト上で動作しています。なぜこれがうまくいかないのか、それをさらにトラブルシューティングする方法について誰でも知っていますか?要求されたよう

、Dockerfile:

FROM debian:buster 
MAINTAINER Larry Martell <[email protected]> 

ENV HOME /opt/django/CAPgraph/ 

RUN echo "deb http://http.debian.net/debian buster main" >> /etc/apt/sources.list 
RUN (apt-get update -y && DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes build-essential git python python-dev python-setuptools nginx sqlite3 supervisor def 
ault-mysql-server default-libmysqlclient-dev vim cron unzip software-properties-common python2.7 openjdk-8-jre-headless ca-certificates-java openjdk-8-jre xvfb wkhtmltopdf 
sendmail-bin sendmail r-cran-ggplot2 r-cran-caret net-tools traceroute nmap tcpdump) 
RUN (easy_install pip &&\ 
    pip install uwsgi) 

ADD . /tmp/CAPgraph 
RUN cp -rp /tmp/CAPgraph/* $HOME 
RUN pip install -r $HOME/requirements.txt 

# stardog 
ENV STARDOG_HOME /AppData/stardog_knowledgegraph 
ENV STARDOG_JAVA_ARGS "-Xms10g -Xmx10g -XX:MaxDirectMemorySize=10g" 
ADD deploy/stardog/stardog-license-key.bin $HOME/deploy/stardog/stardog-license-key.bin 
ADD deploy/stardog/init $HOME/deploy/stardog/init 

# install utilities 
COPY deploy/util /usr/local/bin 
RUN chmod a+x /usr/local/bin/reset_CAPgraph /usr/local/bin/start_CAPgraph /usr/local/bin/stop_CAPgraph 

RUN (echo "daemon off;" >> /etc/nginx/nginx.conf &&\ 
    rm /etc/nginx/sites-enabled/default &&\ 
    rm -f /etc/nginx/sites-enabled/django.conf &&\ 
    ln -s /opt/django/CAPgraph/supervisord.conf /etc/supervisor/conf.d/) 

RUN chown -R root:root $HOME 
RUN chmod 777 $HOME 
RUN chmod 777 /opt/django 

VOLUME ["/opt/django/CAPgraph"] 
EXPOSE 80 8006 443 3306 
ADD crontab /etc/cron.d/backupMySQL 
RUN chmod 0644 /etc/cron.d/backupMySQL 
RUN touch /var/log/cron.log 

CMD ["/opt/django/CAPgraph/run.sh"] 

とドッキングウィンドウの実行コマンド:

sudo docker run -d --restart=always -v /home/lmartell/devel1/Repos/CAPgraph:/opt/django/CAPgraph -v /home/lmartell/devel1/AppData/mysql_CAPgraph:/var/lib/mysql -v /etc/localtime:/etc/localtime -v /home/lmartell/devel1/AppData/cap_data:/AppData/cap_data -v /home/lmartell/devel1/bin:/opt/bin -v /home/lmartell/devel1/AppData/stardog_knowledgegraph:/AppData/stardog_knowledgegraph -p 18080:80 -p 18000:18000 -p 15820:5820 -p 3306:3306 --name devel1 elucidbio/capgraph:devel 

そして私から接続してい他の容器からのコマンドを実行します。使用しないでください

sudo docker run -d --restart=always --link devel1 -v /home/lmartell/devel1/AppData:/AppData -v /home/lmartell/devel1/AppData:/projects -v /home/lmartell/devel1/Repos/CAPbase/capcompute:/opt/capcompute -v /home/lmartell/devel1/Repos/CAPgraph:/opt/CAPgraph -v /home/lmartell/devel1/Repos:/opt/django -v /home/lmartell/devel1/bin:/opt/bin -v /etc/localtime:/etc/localtime -v /bartok_SDBexports:/bartok_SDBexports --name capcompute-devel1 capcompute:latest 
+0

ドッカーの実行コマンドdockerfileを投稿し、使用する場合は、これを作成すると助けになります –

+0

ドッカーファイルと実行コマンドが追加されました。作成を使用していません。 –

答えて

0

内部的にサービスを参照するIPアドレス。 mysqlサービスコンテナを作成し、その名前に "db"という名前を割り当てると、他のコンテナ内の "db"という名前でアクセスできます。

新しいドッカーネットワークを最初に作成し、ドッカーの実行ステートメントでコンテナを割り当てることをお勧めします。次に、相互通信に問題はありません。

これはもともとドッカーサービスでのみ利用可能でしたが、リンクを非難するために機能を追加しました。

+0

名前でアクセスできると言ったら、mysqlの-h host引数でうまくいくと言っていますか?新しいドッカーネットワークを作っている方がいいかもしれませんが、今は解決すべき緊急の問題があります。他のポートやサービスと連携しているので、mysqlポート3306で動作するはずです。今すぐ大きな変更を加えたくはありません。 –

+0

はい、あなたがコンテナ(mysql)とコンテナ(例えばPHP)を持っているなら、それは意味しています。 mysqlコンテナのmysqlとphpコンテナの名前を "application"とすると、その名前でmysqlコンテナのアドレスを解決できるはずです。これは、mysqlクライアントの-hコンポーネント、またはIP/DNS名で接続する必要のある他の接続で機能します。 – Dockstar

+0

Dockerネットワークについて言及するとき、私は物理ネットワークについても話していません。単なるドッカーアプリケーションネットワークです。 https://docs.docker.com/engine/userguide/networking/ – Dockstar

関連する問題