身に覚えがある行動
docker-compose.yamlを書いた
docker-compose.yaml
version: "3.9"
services:
web:
build: ./web #Dockerfileのあるパスを指定する
volumes:
- ./html:/var/www/html #パスをマウント <HostPath>:<Container Path>
ports:
- 80:80 #ポートを公開 <Host IP>:<Host Port>:<Container Port>
depends_on:
- mysql
mysql:
image: mysql:8
volumes:
- ./mysql:/var/lib/mysql
- ./mysql/config/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
- MYSQL_ROOT_PASSWORD=root #適切に変更
- MYSQL_DATABASE=test_db
- MYSQL_USER=test_user
- MYSQL_PASSWORD=test_password #適切に変更
ports:
- 3306:3306
コンテナを立ち上げた(WSL2)
$ docker-compose up
コンテナの中に入った(WSL2)
$ sudo docker exec -i -t <webのコンテナID> bash
コンテナの中でなんか操作した(webのコンテナの中)
# ls /var/www/html
何したか覚えていないけど変なことした気がしない。
ハマった
権限を確認する
$ ls -l
total 20
-rw-r--r-- 1 user user 25 Oct 6 21:55 README.md
-rw-r--r-- 1 user user 661 Oct 6 23:09 docker-compose.yaml
drwxr-xr-x 2 root root 4096 Oct 6 23:09 html
drwxr-xr-x 3 999 user 4096 Oct 6 23:09 mysql
drwxr-xr-x 4 user user 4096 Oct 6 23:06 web
/html の所有者と所有グループがrootになっている。Hmmmm...
とりあえず権限を変更する
$ sudo chown user -R html
$ sudo chown :user -R html
- 直った
原因
- コンテナに入ったときに、root権限で入ってしまったのが問題な気がする。
解決策
なんかよくわかんないけどDockerfileに下記を追加する
ARG UID=1000
RUN useradd -m -u ${UID} docker
USER ${UID}
$ sudo docker exec -it <コンテナ名> bash
docker@1f228fef9438:/var/www/html$
今度は大丈夫そう。
追記
- mysqlの方も似たような問題が起きた
- コンテナ立ち上げた時点で問題が起きている???
- ファイルやディレクトリがWindows側(/mnt/c 配下)だともっとややこしかったかも
あとで読む
なんもわかんね
わかんね
更に追記
WSLのdockerを利用しているのもあり、各DockerのユーザとWSLユーザの権限をそろえておきたいので、.envでユーザIDとグループIDを渡しておきます。
これか?