Linux에서 Docker를 사용하면 Docker 옆에 생성된 파일이 루트에 문제가 될 수 있습니다
정황
만약 인산 효소가 Linux에서 Docker를 사용한다면 루트에서 실행해야 한다
→일일
sudo docker-compose
및 루트 실행 필요→이 점에 관해서는zsh에alias를 붙이면 해결할 수 있기 때문에 힘들지 않다
컨테이너 내에서 자동으로 생성되는 경우(예: Laavel 등을 통해 파일을 생성하는 경우)
→ 생성된 파일이 루트가 됨: 루트
→Read only가 되면 로컬에서 접촉할 수 없어 일일이
sudo chown
원래 루트에서 Docker=docker한테 이상하게 훈련받으면 끝이에요.
→안전 면에서도 좋지 않다
Rootless 모드
이 문제는
userns-remap
의 해결 방법이 있다Docker v19.03부터 루트리스 모드를 준비한 것 같은데 이걸로 해보고 싶어요.
userns-remap
수호 프로세스 자체가 루트에서 이동하는 것과 비교하면Rootless 모드에서는 모든 작업에 루트 권한이 없습니다.
(일부 기능은 아직 시작되지 않았습니다.)
컨디션
설치하다.
대체로 Docker의 공식 홈페이지에 탑승한 것 같지만, Arch Linux의 사용자 창고(AUR)에 방법이 기재되어 있기 때문이다.
AUR로 즐기고 싶어요.
20/12/09 정도면 AUR 페이지에서 아래 정보를 사용하면서 사용할 수 있는지 확인하세요.
https://aur.archlinux.org/packages/docker-rootless/
21/01/03 위가 안 보여요.이하로 들어갈 수 있습니다.아무래도 요즘 이 일대는 엉망진창이니 역시 정부측에 보는 것이 좋을 것 같다
AUR에서 docker-rootless 설치
추기
공식을 확인한 후 아래 장치를 설치하는 것을 추천합니다.
$ sudo pacman -S fuse-overlayfs
상기 AUR에 따라 먼저 AUR에 docker-rootless를 넣는다$ yay -S docker-rootless
이 끝나면 표시됩니다.이건 아까 AUR의 댓글에서 말했듯이 이걸로 하겠습니다.=== Post installation message from docker-rootless ===
This is based on https://docs.docker.com/engine/security/rootless/
To Run the Docker daemon as a non-root user (Rootless mode) for ArchLinux, you need t
o do the following things:
1. configure kernel settings
create '/etc/sysctl.d/99-docker-rootless.conf': 'kernel.unprivileged_userns_clone=1'
and then run: 'sudo sysctl --system'
> see https://docs.docker.com/engine/security/rootless/#distribution-specific-hint for detailed information
2. configure subuid and subgid
and create '/etc/subuid' and '/etc/subgid' with: 'testuser:231072:65536' (for example
, 'testuser' is username)
> see https://docs.docker.com/engine/security/userns-remap/#prerequisites for detailed information
3. start and enable user service: 'systemctl --user status|start|stop docker'
4. finally set docker socket environment variable: 'export DOCKER_HOST=unix://$XDG_RU
NTIME_DIR/docker.sock', you can also add it to '~/.bashrc' or somewhere alike
=========
커널 설정
하다
/etc/sysctl.d/99-docker-rootless.conf
kernel.unprivileged_userns_clone=1
subuid,subgid 설정
각각 아래 내용에 따라 생성
사용자 이름 에 사용자 이름 을 입력합니다.
※ 주의:subgid는 그룹의 id인 줄 알았는데 이것도 사용자의 id로 하면 됩니다.
이것은 진흙탕에 빠져 시간을 낭비하는 것이다.짐승.
/etc/subuid 및/etc/subgid
ユーザ名:231072:65536
※ 231072와 관련해서는 절대 덮어쓰지 않는 시작 id만 지정하면 되므로 114514 또는subuid,subgid 모두 10000-65536개를 확보했는데 괜찮은 것 같아요.
사용자의 Docker 시작, 자동 시작 유효
# まず状態の確認
$ systemctl --user status docker
# State が running でなければ start
$ systemctl --user start docker
# 自動起動を有効に
$ systemctl --user enable docker
enable를 진행할 때 설정이 끝난 후에 docker가 시작되었는지 확인하는 것이 좋습니다마지막으로 status가 작동되는지 확인하는 게 좋을 것 같아요.
시스템을 시작할 때 루트 측과
--user
측에서 각각 start enableroot의 docker가 시작되지 않았습니다.user의 docker만 시작되면failed입니다
그리고 시작하지 않는 이유로 사용자가 docker 그룹에서 뛰어나다
원래는 그거 하기 싫어서 루트러스 docker였을 텐데 이렇게 되면 좀 그런거 같아
어쨌든 이거 했어도 failed.
추기: 20/12/09
start rootless 모드의 docker만 있으면 됩니다.왜요?
Docker Host
PATH를 통과하는 데 사용된 셸 사용
나는
zsh
그래서.zshrc
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
재부팅
이후에 사용자 권한
docker info
을 사용할 수 있습니까?가능하다면 축하드립니다:tada:
주의
rootless의 Docker, sudo가 시작하는 것과 다른 용기 등
즉, 같은 프로젝트라도 docker-compose up-d면 새build가 도망갈 수 있다는 거예요.
신칸센에서 연결될 때 나는 일부러 컨테이너 빌딩을 뛰어다니다가 황급히 껐다
그날은 통신 제한이 있어서 그 달은 매우 배고프니 주의해야 한다!
추기
docker의 파일 저장처를 되돌려주면 루트 옆에 있는 docker와 관계를 설정하는 파일이 일치하지 않습니까?생각
build 컨테이너에 있을 때 이런 느낌이 들어요.
Status: Downloaded newer image for php:8-fpm
---> edc6bf79d9ba
Step 2/2 : RUN apt update && docker-php-ext-install pdo pdo_mysql
---> Running in 5616e0ab9a5a
ERROR: Service 'php' failed to build : /run/containerd/s/60ceecf888f9382eafe6d7308496a508a83e2bd819ef77fb285590aaf9a7985b: mkdir /run/containerd/s: permission denied: unknown
이것은 루트와 루트리스의 docker로 나뉘어진 환경이 아닌가?이런 느낌이 들어서.rootless의 docker가 다른 곳을 지정해 보십시오
각자의 status를 확인해 보도록 하겠습니다.
rootless
$ systemctl --user status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: >
Active: inactive (dead)
TriggeredBy: ● docker.socket
root이 두 개의 도커.서비스에 시작할 때의 설정 등을 주입합니다
rootless docker의 docker입니다.service
이 녀석의 ExecStart를 변경할 거야.
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine (Rootless)
Loaded: loaded (/usr/lib/systemd/user/docker.service; disabled; vendor preset:
Active: inactive (dead)
Docs: https://docs.docker.com
이번에는 사용자를 위한 docker 디렉터리입니다.docker를 써봤어요.[Unit]
Description=Docker Application Container Engine (Rootless)
Documentation=https://docs.docker.com
[Service]
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=DOCKERD_FLAGS="--experimental"
ExecStart=/usr/bin/dockerd-rootless.sh $DOCKERD_FLAGS
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
Type=simple
[Install]
WantedBy=default.target
참조: https://xvideos.hatenablog.com/entry/move_docker_locationbind는 1024 이하의 특권 포트를 사용할 수 없습니다
재추기
보통 하면 nginx를 만들 때 1024 이하의 포트를 사용할 수 없다는 욕을 먹어요.
ExecStart=/usr/bin/dockerd-rootless.sh $DOCKERD_FLAGS --data-root /home/<USERの名前>/.docker
욕을 먹겠지만 쓰고 싶을 때가 있어서 허락루트 이외의 사용자가 Docker 데몬 실행(Rootless 모드) - docker-docs-ja
오류문이 추천한 대로 루트 lesskit 2진법 (setcap) 에 일부 권한을 넘깁니다.
위의 URL에 따라 작업하는데 Arch의 rootlesskit이 있는 곳과 docker 베이스캠프는 좀 다르다고요?그래서
ERROR: for hoge_nginx Cannot start service hoge_nginx: driver failed programming external connectivity on endpoint hoge_nginx (<HASH_IS_HERE_114514>): Error starting userland proxy: error while calling PortManager.AddPort(): cannot expose privileged port 443, you might need to add "net.ipv4.ip_unprivileged_port_start=0" (currently 1024) to /etc/sysctl.conf, or set CAP_NET_BIND_SERVICE on rootlesskit binary, or choose a larger port number (>= 1024): listen tcp 0.0.0.0:443: bind: permission denied
ERROR: Encountered errors while bringing up the project.
로 교체해 보세요./etc/sysctl.d/
에 추가된 부분도 어떤 설정/etc/sysctl.d/99-docker-rootless.conf
을 배웠습니다.
Reference
이 문제에 관하여(Linux에서 Docker를 사용하면 Docker 옆에 생성된 파일이 루트에 문제가 될 수 있습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/oratake/articles/linux-docker-owner-root텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)