私は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は:私がしたいことは、少なくとも、今日のように、かのうないが、自分の質問に答えるために、質問のタイトルを改善しようとしましたが、私はまだ確信していない、改善が
ホストマシンから、あなたは「ローカルホスト:<さらさポート>」を使用してDBにアクセスすることができます。 "localhost:"から "db"にホストマシンのエイリアスを作成することができます。それはあなたを助けるだろうか?ホストネットワークを持つことで、コンテナネットワークの分離の利点は得られません。 –
Sreeni
私のホストマシン(Windows)にエイリアスを作成すると、 'C:\ Windows \ System32 \ drivers \ etc \ hosts'にエントリが作成されます。私はそれをするのが本当に好きです。コンテナネットワークの分離が気にせず、コンテナとホストの両方を同じネットワークに配置したい場合はどうすればよいですか?私はそれを達成することはできますか? – sebagomez
Dockerの内部では、DNS解決はコンテナ用のDockerエンジンで行われ、解決されていない名前には外部DNSサーバーが使用されます。ホストはDockerエンジンのDNSデータベースについて全く知らない。あなたのケースでは、コンテナとホストがdb用の同じDNSデータベースを持つようにします。最も簡単な方法はエイリアスをホストすることです。これはあなたには使えないようです。私が考えることができる1つの方法は、コンサルのような外部DNSサーバを使用して、コンテナから外部サーバにサービスを公開し、コンテナとホストの両方にそのDNSサーバを使用させることです。 – Sreeni