web-dev-qa-db-ja.com

Dockerコンテナからホストのマシンのローカルホスト127.0.0.1にアクセスする方法

ローカルホストでGitデーモンをホストしました。つまり'/usr/bin/git daemon --listen=127.0.0.1 --base-path=/opt'systemdサービスとして、Dockerコンテナからアクセスしようとしています。ポートを外部ネットワークに公開したくないので、ポートについては触れませんでした。

Dockerfile:

RUN git clone git://127.0.0.1/repo/ repo_dir

しかし、それは機能しておらず、コンテナ内でコンテナのローカルホストに接続しようとしているように見えます。

では、Dockerコンテナからホストマシンのローカルホストに接続するにはどうすればよいですか?

5
Dhairya

動作しておらず、コンテナ内でコンテナのローカルホストに接続しようとしているように見えます。

はい、それは_docker build_(Dockerfile行ごとに1つのコンテナーを構築し、それを中間イメージにコミットする)でさえ、コンテナーによって提供される分離の背後にあるすべてのアイデアです。

OP dhairya によってコメントされ、ドキュメントで言及されているように、コメントで参照しました: " Dockerコンテナネットワーク "および _docker build_ 、ビルド中にRUN命令のネットワークモードをHostに設定できます。その場合、localhostはホストlocalhost。

_ docker build --network="Host"
_

これは、 API 1.25+のみdocker v.1.13.0-rc5 (2017年1月)以降です。

_POST /build_は、ビルド中に使用されるネットワークを指定するためにnetworkmodeパラメーターを受け入れます。


ただし、実際にビルドされたイメージにGitが必要ない場合(メインプロセスを実行するため)、Gitの方が簡単です。

  • リポジトリをローカルに(ホスト上で直接) dockerビルドの前クローンします。
    ビルド中のソースディレクトリ(ビルドのコンテキスト)からの相対パスである必要があるため、Dockerfileがある場所にクローンを作成する必要があります。
  • dockerfileで COPYディレクティブ を使用して、チェックアウトされたGitリポジトリを表すHostフォルダーをコピーします。
    注:_.git/_を not コピーするために、_.dockerignore_(Dockerfileと同じフォルダー内のファイル)に_repo_dir/.git_:を追加します。 (SOMECODE)__ターゲットイメージにgitがない場合は、そのクローンリポジトリのフォルダー。

    _COPY repo_dir .
    _

(ここで、 '_._'は、構築中のイメージ内の現在のWORKDIRを表します)

11
VonC