TrafeX / docker-php-nginx

Docker image with PHP-FPM 8.3 & Nginx 1.24 on Alpine Linux
https://hub.docker.com/r/trafex/php-nginx
MIT License
1.33k stars 721 forks source link

vscode-server` #164

Closed Boffice closed 5 months ago

Boffice commented 6 months ago

Vscode can't create folder while attaching to dev container. Error happens when connecting to container via VScode remote Explorer

[12 ms] Dev Containers 0.327.0 in VS Code 1.85.1 (0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2).
[12 ms] Start: Resolving Remote
[12 ms] Setting up container: /bo-web-nginx
[18 ms] Start: Run: docker inspect --type container /bo-web-nginx
[111 ms] Start: Run: wsl -l -v
[156 ms] Start: Run: wsl -d docker-desktop-data -e /bin/sh -c echo ~
[237 ms] Could not connect to WSL.
[237 ms] Command failed: wsl -d docker-desktop-data -e /bin/sh -c echo ~
[237 ms] 
[237 ms] <3>WSL (28) ERROR: CreateProcessEntryCommon:370: getpwuid(0) failed 2
<3>WSL (28) ERROR: CreateProcessEntryCommon:374: getpwuid(0) failed 2
<3>WSL (28) ERROR: CreateProcessEntryCommon:577: execvpe /bin/sh failed 2
<3>WSL (28) ERROR: CreateProcessEntryCommon:586: Create process not expected to return
[238 ms] Start: Check Docker is running
[238 ms] Start: Run: docker version --format {{.Server.APIVersion}}
[325 ms] Server API version: 1.43
[325 ms] Start: Run: C:\Users\docker\AppData\Local\Programs\Microsoft VS Code\Code.exe --ms-enable-electron-run-as-node c:\Users\docker\.vscode\extensions\ms-vscode-remote.remote-containers-0.327.0\dist\spec-node\devContainersSpecCLI.js set-up --container-id 65ec679d149ff4d4c9ad52984a9254587f193485f58273b459ce1bb81efe0cc5 --user-data-folder c:\Users\docker\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data --container-session-data-folder /tmp/devcontainers-062db91c-ff11-43e2-8696-d889700c43c11704630655879 --log-level debug --log-format json --default-user-env-probe loginInteractiveShell --skip-post-create
[614 ms] @devcontainers/cli 0.54.1. Node.js v18.15.0. win32 10.0.22631 x64.
[614 ms] Start: Run: docker buildx version
[824 ms] github.com/docker/buildx v0.11.2-desktop.5 f20ec1393426619870066baba9618cf999063886
[824 ms] 
[824 ms] Start: Run: docker inspect --type container 65ec679d149ff4d4c9ad52984a9254587f193485f58273b459ce1bb81efe0cc5
[914 ms] Start: Inspecting container
[914 ms] Start: Run: docker inspect --type container 65ec679d149ff4d4c9ad52984a9254587f193485f58273b459ce1bb81efe0cc5
[1007 ms] Start: Run in container: /bin/sh
[1013 ms] Start: Run in container: uname -m
[1095 ms] x86_64
[1095 ms] 
[1095 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[1096 ms] NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.5
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
[1096 ms] 
[1096 ms] Start: Run in container:  (command -v getent >/dev/null 2>&1 && getent passwd 'nobody' || grep -E '^nobody|^[^:]*:[^:]*:nobody:' /etc/passwd || true)
[1098 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcEnvironmentMarker'
[1099 ms] 
[1099 ms] 
[1099 ms] Exit code 1
[1099 ms] Start: Run in container: /bin/sh
[1105 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcEnvironmentMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcEnvironmentMarker' ; } 2> /dev/null
[1247 ms] 
[1247 ms] 
[1247 ms] Start: Run in container: cat >> /etc/environment <<'etcEnvrionmentEOF'
[1249 ms] 
[1249 ms] 
[1249 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcProfileMarker'
[1249 ms] 
[1250 ms] 
[1250 ms] Exit code 1
[1250 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcProfileMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcProfileMarker' ; } 2> /dev/null
[1251 ms] 
[1251 ms] 
[1251 ms] Start: Run in container: sed -i -E 's/((^|\s)PATH=)([^\$]*)$/\1${PATH:-\3}/g' /etc/profile || true
[1252 ms] 
[1252 ms] 
[1261 ms] Start: Run: C:\Users\docker\AppData\Local\Programs\Microsoft VS Code\Code.exe --ms-enable-electron-run-as-node c:\Users\docker\.vscode\extensions\ms-vscode-remote.remote-containers-0.327.0\dist\spec-node\devContainersSpecCLI.js read-configuration --container-id 65ec679d149ff4d4c9ad52984a9254587f193485f58273b459ce1bb81efe0cc5 --log-level debug --log-format json --include-merged-configuration --mount-workspace-git-root
[1424 ms] @devcontainers/cli 0.54.1. Node.js v18.15.0. win32 10.0.22631 x64.
[1424 ms] Start: Run: docker inspect --type container 65ec679d149ff4d4c9ad52984a9254587f193485f58273b459ce1bb81efe0cc5
[1533 ms] Start: Inspecting container
[1533 ms] Start: Run: docker inspect --type container 65ec679d149ff4d4c9ad52984a9254587f193485f58273b459ce1bb81efe0cc5
[1634 ms] Start: Run in container: /bin/sh
[1641 ms] Start: Run in container: uname -m
[1800 ms] x86_64
[1801 ms] 
[1801 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[1802 ms] NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.5
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
[1802 ms] 
[1802 ms] Start: Run in container:  (command -v getent >/dev/null 2>&1 && getent passwd 'nobody' || grep -E '^nobody|^[^:]*:[^:]*:nobody:' /etc/passwd || true)
[1804 ms] Start: Run in container: test -d /.vscode-server
[1805 ms] 
[1805 ms] 
[1805 ms] Exit code 1
[1805 ms] Start: Run in container: test -d /.vscode-remote
[1806 ms] 
[1806 ms] 
[1806 ms] Exit code 1
[1806 ms] Start: Run in container: test ! -f '/.vscode-server/data/Machine/.writeMachineSettingsMarker' && set -o noclobber && mkdir -p '/.vscode-server/data/Machine' && { > '/.vscode-server/data/Machine/.writeMachineSettingsMarker' ; } 2> /dev/null
[1807 ms] 
[1808 ms] mkdir: can't create directory '/.vscode-server/': Permission denied
[1808 ms] Exit code 1
[1808 ms] Start: Run in container: cat /.vscode-server/data/Machine/settings.json
[1809 ms] 
[1809 ms] cat: can't open '/.vscode-server/data/Machine/settings.json': No such file or directory
[1809 ms] Exit code 1
[1809 ms] 
Support for Alpine Linux is in preview.

[1809 ms] Start: Run in container: test -d /.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2
[1810 ms] 
[1810 ms] 
[1810 ms] Exit code 1
[1810 ms] Start: Run in container: /bin/sh
[1816 ms] Installing VS Code Server for commit 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2
[1816 ms] Start: Run in container: apk info | grep -e '^libstdc++$' || (apk update && apk add libstdc++)
[1817 ms] Start: Downloading VS Code Server
[1817 ms] 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2 linux-alpine stable 
[1905 ms] libstdc++
[1905 ms] WARNING: opening from cache https://dl-cdn.alpinelinux.org/alpine/v3.18/main: No such file or directory
WARNING: opening from cache https://dl-cdn.alpinelinux.org/alpine/v3.18/community: No such file or directory
[15035 ms] Start: Installing VS Code Server
[15036 ms] Start: Run in container: mkdir -p /.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2_1704630671257
[15039 ms] 
[15039 ms] mkdir: can't create directory '/.vscode-server/': Permission denied
[15039 ms] Exit code 1
[15040 ms] Start: Run in container: rm -rf /.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2_1704630671257
[15041 ms] 
[15041 ms] 
[15044 ms] Command in container failed: mkdir -p /.vscode-server/bin/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2_1704630671257
[15044 ms] mkdir: can't create directory '/.vscode-server/': Permission denied
[15045 ms] Exit code 1
Boffice commented 6 months ago

Upon thoroughly reviewing your code, I've pinpointed the issue. While using 'nobody' as a user is a wise choice for server security, it's not quite practical for a development environment. I recommend making it an optional setting.

Personally, I prefer having root access on my development machine, but I do appreciate the security benefits of using 'nobody' for cloud production environments.

TrafeX commented 5 months ago

Hi @Boffice,

Don't you have a way to configure what user vscode should use to access the container? The processes (nginx/php-fpm) are running under the nobody user, but you can still access the container as root with docker exec -ti -u root <command>. I would expect that vscode can do the same.

Boffice commented 5 months ago

@TrafeX Hey,

Found solution: https://containers.dev/implementors/json_reference/

TrafeX commented 5 months ago

Good to hear! Then I close this issue.