2015-09-23 20 views
14

ホストのポートをコンテナのポートにマップする必要があります。私はオプションで"docker run"コマンドを実行することでこれを達成できます。 Dockerfileでこれを達成するにはどうすればよいですか?以下のものを使用して、 は私がtehのdockerfileを介して公開ポートは公開することができます他にどのように"deprecated error"ドッカーファイルにポートを公開する方法

EXPOSE 80:8080 

を与えますか?

答えて

14

できません。ドッカーホストに公開されているポートは、実行しようとしているイメージではなく、ローカル管理者が決定する必要があります。これは、(a)セキュリティ上の問題(ちょっと、私はあなたのシステムへのsshアクセスを開いたばかりです!)と(b)失敗する傾向があります(私のWebサーバコンテナはポート80でバインドできません。ポート80)。

長いdocker runコマンドラインを避けたい場合は、docker-composeのようなものを使用してプロセスを自動化することを検討してください。

アップデート2017年3月11日を

mywebserver: 
    image: myname/mywebserver 
    ports: 
    - 80:8080 

そしてシンプルdocker-compose upは、ポート80

をホストするためにバインドされた容器ポート8080を使用してコンテナを起動します:あなたは、その後のようなドッキングウィンドウ-構成設定を渡すことができます時間ではないでしょうdocker-composeを使用して

  • :ウィラさんのコメントに応えて

    ポート衝突の問題が発生しました。ポート衝突の問題は、イメージがホストポートバインドを指定できないようにする理由です。私は単に複数のポートバインディングを持つ長いdocker runコマンドラインの代わりにdocker-composeを提供していました。ポート衝突の問題により、ホスト上でサービス拒否攻撃を実行する可能性があります。たとえば、ホスト上のApacheサーバー(または別のコンテナ)の前にコンテナが起動してポート80にバインドされた場合、あなたはあなたのWebサービスを失ったばかりです。

  • セキュリティ上の問題について:イメージがホストポートバインディングを指定できた場合、コンテナーは、コンテナーが無意識にコンテナーへのアクセスを開く可能性があります。リモートユーザがホスト上のコンテナにアクセスできるようにすると、カーネル内のネームスペース機能がコンテナを完全に分離できない場合にホストが侵害される可能性があります。そのコンテナが不正な目的のために使用されている場合には、潜在的な法的問題に至る。どちらの場合でも、それは悪い考えです。

+0

ありがとうございます!役に立った: –

+0

ドッカーを使ってどのようにポートコリジョンの可能性を解決するのですか?セキュリティ上の問題についてもう少し詳しく説明できますか? – Willa

10

を公開し、を公開の違いがあります。

公開は、コンテナ側のポートを開くことを意味します。パブリッシュとは、Dockerホスト上で外部に開くことを意味します。

たとえば、ドッカーの実行コマンドが-p80:8080の場合、コンテナのポート8080とホストの公開ポート80が公開されています。

ポートを公開する柔軟性が必要な場合は、実際にDockerfileにポートを公開することしかできません。ドッカーの実行で-p optingを使用する必要があります。

関連する問題