6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】EC2 ubuntu内でDockerのhttpd(Apache)コンテナを起動してアクセスしても、403 Forbiddenとなる問題

Last updated at Posted at 2022-07-28

現象

EC2内で、ドキュメント通りにubuntu内にDocker Engineの立ち上げ。

/home/ubuntuでhttpdのDockerコンテナをドキュメント通りに起動

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

WEBサーバとしてhttp://[EC2のpublic IPv4]:8080にアクセスしたが、403 Forbidden。

image.png

ちなみに、さわって学ぶクラウドインフラ docker基礎からのコンテナ構築を読み進めてる中で遭遇しました。

調査

権限の改善

コンテナの出力を見ると、ファイルへのアクセス権限がないらしい

$ docker logs --follow my-apache-app
[Thu Jul 28 14:42:38.033124 2022] [core:error] [pid 8:tid 139789340034816] (13)Permission denied: [client ***] AH00035: access to /index.html denied (filesystem path '/usr/local/apache2/htdocs/index.html') because search permissions are missing on a component of the path
[EC2のpublic IPv4] - - [28/Jul/2022:14:42:38 +0000] "GET / HTTP/1.1" 403 199

ホストとコンテナ内だと、userがubuntu -> rootになってることが発覚
多分下の問題と同じ。
参考: dockerでvolumeをマウントしたときのファイルのowner問題

# EC2のホストで
$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),118(netdev),119(lxd),999(docker)

# コンテナ内に侵入
$ docker container exec -it my-apache-app bash
$ id
uid=0(root) gid=0(root) groups=0(root)

コンテナ内の/usr/local/apache2/htdocs/の権限が所有者だけになってるから、rootではアクセスできないのかな。

# コンテナ内
$ ls -ld /usr/local/apache2/htdocs/
drwx------ 5 1000 1000 4096 Jul 28 14:30 /usr/local/apache2/htdocs/

権限を無理矢理付与したら、アクセスはできた。

$ chmod 707 /usr/local/apache2/htdocs/

image.png

EC2にsshできなくなった問題

え?Permission denied?

$ ssh -i ~/.ssh/docker.pem ubuntu@[EC2のpublic IPv4]
ubuntu@[EC2のpublic IPv4]: Permission denied (publickey).

EC2のコンソールから直接Connectはできる。sshができない。

EC2のドキュメントを見ると、なんと/home以下のディレクトリの権限がおかしいとsshできないらしい。

Linux ホームディレクトリ (/home) であれば、(0755/drwxr-xr-x) にする必要があります。
ユーザーのホームディレクトリ (/home/ec2-user/) であれば、(0700/drwx------) にする必要があります。
.ssh ディレクトリのアクセス許可 (/home/ec2-user/.ssh) であれば、(0700/drwx------) にする必要があります。

いや別にそこの権限は変えてないし、って思ってConnectしたEC2内で権限を確認すると、いつの間にか/home/ubuntuの権限が変わってる!

$ ls -ld /home/ubuntu/
drwx---rwx 5 ubuntu ubuntu 4096 Jul 28 14:30 /home/ubuntu/

Dockerのマウントって、ディレクトリの権限変更もホスト側に反映するんだ?!って驚きました。
あと、ホストの/home/ubuntu/と、コンテナ内の/usr/local/apache2/htdocs/の権限が対応してマウントされるのも驚きポイントでした。
(ここはよくわかってないので、詳しい方いたら参考資料ください笑)

とりあえず権限戻す。

$ chmod 700 /home/ubuntu/
$ ls -ld /home/ubuntu/
drwx------ 5 ubuntu ubuntu 4096 Jul 28 14:30 /home/ubuntu/

これでsshできることを確認。
ただし、これによってWEBサーバとしては403 Forbiddenになってしまう。

解決策

  • /home/ubuntuの権限はいじっちゃダメ
  • しかしWEBサーバとしてアクセスはしたいので、コンテナ内の/usr/local/apache2/htdocs/の権限は変えたい
  • ていうか権限設定が重要な/home/ubuntu自体にマウントさせているのがまずいのでは?
  • じゃあ適当なディレクトリ掘って、そことマウントさせれば良いんじゃね?

ってことで以下で解決しました。

$ mkdir /home/ubuntu/docker
$ docker run -dit --name my-apache-app -p 8080:80 -v /home/ubuntu/docker:/usr/local/apache2/htdocs/ httpd:2.4
6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?