[解決済み】Dockerコンテナからホストポートにアクセスする方法
質問
私はjenkinsを実行しているdockerコンテナを持っています。ビルドプロセスの一部として、ホストマシンでローカルに実行されているWebサーバーにアクセスする必要があります。ホストのウェブサーバー(ポートで実行するように設定可能)をjenkinsコンテナに公開する方法はありますか?
EDIT: 私はLinuxマシンでdockerをネイティブに動かしています。
UPDATE
下記の@larsksの回答に加え、ホストマシンからHost IPのIPアドレスを取得するために、私は以下のようにしています。
ip addr show docker0 | grep -Po 'inet \K[\d.]+'
解決方法は?
Linux上でDockerをネイティブに動作させる場合、ホストサービスへは
docker0
インターフェイスを使用します。 コンテナ内部からは、これがデフォルトのルートになります。
例えば、私のシステムで
$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link
valid_lft forever preferred_lft forever
そして、コンテナの中。
# ip route show
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 src 172.17.0.4
このIPアドレスを抽出するのは、簡単なシェル スクリプトを実行します。
#!/bin/sh
hostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip
を修正する必要があるかもしれません。
iptables
を許可するために、ホスト上で
Dockerコンテナからの接続。このようなもので対応できます。
を使用します。
# iptables -A INPUT -i docker0 -j ACCEPT
これは、Dockerからホスト上の任意のポートへのアクセスを許可するものです。 コンテナです。 そのことに注意してください。
-
iptables のルールは順序付けされており、このルールが実行されることも、されないこともあります。 は、その前に来る他のルールに依存して正しいことを行います。
-
のどちらかであるホストサービスにのみアクセスすることができます。 でリスンしている
INADDR_ANY
(aka 0.0.0.0)、または明示的に をリッスンしています。docker0
インターフェイスを使用します。
でDockerを使用している場合
MacOS
または
ウィンドウズ
18.03+ では、マジックホストネームの
host.docker.internal
.
最後に、Linux では、コンテナをホストネットワークの名前空間で実行するために
--net=host
この場合
localhost
と同じです。
localhost
そのため、コンテナ化されたサービスはコンテナ化されていないサービスと同じように動作し、追加の設定なしにアクセスできるようになります。
関連
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
-
[解決済み] ライブDockerコンテナでポートを公開する
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] docker-compose: ラン、エクゼクティブの違い、レイヤーはどうなるのか?
-
[解決済み] DockerコンテナでPipeworkを使用する際に、RTNETLINK Operation Not Permittedが発生するのはなぜですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Dockerコンテナ内部からDockerホストのIPアドレスを取得する方法
-
[解決済み】Dockerコンテナ内のRootパスワードについて
-
[解決済み】特定のコンテナのみdocker-composeを立ち上げる。
-
[解決済み】docker-composeが常に新しいイメージからコンテナを再作成するようにするにはどうすればよいですか?
-
[解決済み】dockerイメージのインストールディレクトリを変更する方法は?
-
[解決済み] dockerコンテナからホスト上でシェルスクリプトを実行するには?
-
[解決済み] 他のコンテナからDockerコンテナにアクセスする