2015-01-04 17 views
15

私はちょうどドッキングウィンドウを使用して開始し、次のチュートリアルに続く:https://docs.docker.com/engine/admin/using_supervisord/dockerコンテナをApacheサーバーとして使用するには?

FROM ubuntu:14.04 
RUN apt-get update && apt-get upgrade 
RUN apt-get install -y openssh-server apache2 supervisor 
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor 
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
EXPOSE 22 80 
CMD ["/usr/bin/supervisord"] 

[supervisord] 
nodaemon=true 

[program:sshd] 
command=/usr/sbin/sshd -D 

[program:apache2] 
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" 

ビルドして実行します。

sudo docker build -t <yourname>/supervisord . 
sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord 

をドッキングウィンドウは、と私のサーバー上で実行したときに私の質問は、ありますIP http://88.xxx.x.xxx/、どのように私のコンピュータ上のブラウザからドッカーのコンテナ内で実行されているapache localhostにアクセスできますか?ドッカーコンテナをWebサーバーとして使用したいと思います。

答えて

20

にアクセスできます。 Docker docsから

:デフォルトドッカーコンテナによって

は、外の世界への接続を行うことができますが、外の世界は、容器に接続することはできません。

コンテナに着信接続を受け入れる場合は、docker runを呼び出すときに特別なオプションを指定する必要があります。

だから、これは何を意味するのでしょうか?ホストマシン上のポート(通常はポート80)を指定し、そのポート上のすべての接続をドッカーコンテナに転送する必要があります。ドッカーコンテナでApacheを実行しているので、おそらくドッキングコンテナのポート80に接続を転送したいと思うでしょう。

docker runコマンドの場合は、-pオプションを使用するのが最適です。

sudo docker run -p 80:80 -t -i <yourname>/supervisord 

-p 80:80は、容器のポート80へのホストからのお楽しみのポート80を意味言うコマンドの一部。

が、これは正しく設定されている場合、あなたはhttp://88.x.x.xにサーフィンするためにブラウザを使用することができますし、意図したとおりの接続は、コンテナに転送されます。

Docker docsは、-pオプションを完全に記述しています。この質問はもともとApache Webサーバーの公式ドッキングウィンドウコンテナがありませんでした投稿されたとき:

# Maps the provided host_port to the container_port but only 
# binds to the specific external interface 
-p IP:host_port:container_port 

# Maps the provided host_port to the container_port for all 
# external interfaces (all IP:s) 
-p host_port:container_port 

編集:フラグを指定するいくつかの方法があります。現在、既存のバージョンが存在します。

Apacheを起動して実行する最も簡単な方法は、official Docker containerを使用することです。それがドッキングウィンドウコンテナで利用可能であり、上記のように、あなたのホストポートは、容器のポートに転送されるように、あなたは、単にあなたのファイルシステム上のフォルダをマウント

$ docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 

この方法:次のコマンドを使用して、それを起動することができます。

+0

このようなコンテナ内のApacheにアクセスするには、IPアドレスではなく、指定されたドメイン名を参照してください。私は 'http:// 127.0.0.1 /'を参照してアクセスできるコンテナを実行していますが、 'http:// website.localhost /'などに変更したいと思います。 –

+0

それはどういうわけか、ちょうどそのようには機能しませんでした。さらに、web.localhostto 127.0.0.1からのリクエストをプロキシするNginxサーバーを追加しました。 –

12

apacheの公式画像があります。イメージドキュメントには、この公式イメージをカスタムイメージのベースとして使用する方法が記載されています。公式の画像で使用さDockerfileでかいま見を取る行うのかを確認するには

https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile

ファイルはこれら

sudo chown -R root:root /path/to/html_files 

ホストをルートにアクセス可能であることを確認公式ドッカー画像を使用するファイル

docker run -d -p 80:80 --name apache -v /path/to/html_files:/usr/local/apache2/htdocs/ httpd:2.4 

ファイルは、外の世界から自分のドッキングウィンドウのコンテナにアクセスできるようにポートフォワーディングを使用する必要がありますポート80

関連する問題