2017-08-04 11 views
2

私は2つのコンテナを構成しています.1つはWebサービスと1つはデータベースで構成されています。私のasp.netのコアアプリはwebサービスで実行されているからDarmerコンテナとswarmとホストマシンの内部から接続できません

version: '3.3' 
services: 
    web: 
    image: microsoft/aspnetcore:1.1 
    container_name: web 
    ports: 
    - 5555:80 
    links: 
    - db 
    db: 
    image: microsoft/mssql-server-linux:rc1 
    container_name: db 
    ports: 
    - 1533:1433 
    environment: 
    - "ACCEPT_EULA=Y" 
    - "MSSQL_SA_PASSWORD=MyAdminPwd2017" 
    - "MSSQL_PID=Developer" 

だから、私はちょうどホスト名としてdbを使用してdbでデータベースにアクセスすることができます
はここに私のコンファイルです。しかしdbはホストからは見えません(私はデフォルトブリッジネットワークを持っています)。私は実行中のdbコンテナを調べて、それがIPアドレスであることを見つけると、ホストから自分のデータベースにアクセスできます。それで<ip>,1533に接続できます。

データベースにアクセスするための資格情報を格納するファイルは、webコンテナとホストマシンの両方で使用されます。だから私はdbという名前の方法が必要なので、私は両方の世界から(私のホストマシンから群衆の外に、私のホストマシンから)アクセスすることができます

これを達成する方法はありますか? docker-composeファイルにホストネットワークを定義しようとしましたが、どちらのサービスもそのネットワークを使用していますが、私はただ1つのホストネットワークしか定義できないというメッセージがあります。

EDITは:私がしたいことは、少なくとも、今日のように、かのうないが、自分の質問に答えるために、質問のタイトルを改善しようとしましたが、私はまだ確信していない、改善が

+0

ホストマシンから、あなたは「ローカルホスト:<さらさポート>」を使用してDBにアクセスすることができます。 "localhost:"から "db"にホストマシンのエイリアスを作成することができます。それはあなたを助けるだろうか?ホストネットワークを持つことで、コンテナネットワークの分離の利点は得られません。 – Sreeni

+0

私のホストマシン(Windows)にエイリアスを作成すると、 'C:\ Windows \ System32 \ drivers \ etc \ hosts'にエントリが作成されます。私はそれをするのが本当に好きです。コンテナネットワークの分離が気にせず、コンテナとホストの両方を同じネットワークに配置したい場合はどうすればよいですか?私はそれを達成することはできますか? – sebagomez

+0

Dockerの内部では、DNS解決はコンテナ用のDockerエンジンで行われ、解決されていない名前には外部DNSサーバーが使用されます。ホストはDockerエンジンのDNSデータベースについて全く知らない。あなたのケースでは、コンテナとホストがdb用の同じDNSデータベースを持つようにします。最も簡単な方法はエイリアスをホストすることです。これはあなたには使えないようです。私が考えることができる1つの方法は、コンサルのような外部DNSサーバを使用して、コンテナから外部サーバにサービスを公開し、コンテナとホストの両方にそのDNSサーバを使用させることです。 – Sreeni

答えて

0

[OK]を歓迎しており、そう。

誰かが私が欲しいものを達成できない理由について素敵な記事を書いた。それはWindowsコンテナでは可能だが、一時的な「制限」になる可能性がある。ポストへ

リンク:ドッカーフォーラムへhttps://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/ およびリンク:https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

関連する問題