LoginSignup
1

More than 1 year has passed since last update.

WSL2とDockerで遊んでたらVSCodeでファイルを書き込みできなくなった -Error: EPERM: operation not permitted-

Last updated at Posted at 2022-10-06

身に覚えがある行動

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

何したか覚えていないけど変なことした気がしない。

ハマった

  • VSCodeでファイルを新規作成しようとしたらできない
    image.png
    Error: EPERM: operation not permitted

権限を確認する

$ 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$

今度は大丈夫そう。

追記

あとで読む

なんもわかんね

わかんね

更に追記

WSLのdockerを利用しているのもあり、各DockerのユーザとWSLユーザの権限をそろえておきたいので、.envでユーザIDとグループIDを渡しておきます。

これか?

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
1