컨테이너 도구 팁 및 트릭
이 문서는 Visual Studio Code 컨테이너 도구 확장에 대한 문제 해결 팁과 트릭을 다룹니다. 컨테이너 설정 및 작업에 대한 자세한 내용은 개요 및 Node.js, Python 또는 ASP.NET 빠른 시작 문서를 참조하십시오.
루트가 아닌 사용자로 실행
보안상의 이유로 컨테이너: 작업 영역에 Docker 파일 추가... 명령을 실행할 때 기본 포트를 선택하거나 가능한 경우 1023보다 큰 포트를 사용하는 것이 좋습니다. 이렇게 하면 VS Code에서 Dockerfile을 루트가 아닌 액세스 권한으로 구성하고 악의적인 사용자가 컨테이너에서 권한을 높이는 것을 방지할 수 있습니다. 경우에 따라 포트 선택이 없으므로 컨테이너 도구 확장에서 기본적으로 루트가 아닌 액세스를 구성합니다. 모든 경우에 애플리케이션에서 수정하거나 사용하는 각 리소스(포트 및 파일 등)에 루트가 아닌 사용자가 컨테이너에서 액세스할 수 있는지 확인해야 합니다.
작업 영역에 Docker 파일을 추가할 때 1024 미만의 포트를 선택하면 컨테이너 도구 확장에서 루트가 아닌 사용자로 컨테이너를 실행하는 Docker 파일을 생성할 수 없습니다. 이는 이 범위의 포트를 잘 알려진 또는 시스템 포트라고 하며 네트워크 소켓을 IP 주소에 바인딩하려면 루트 권한으로 실행해야 하기 때문입니다.
컨테이너: 작업 영역에 Docker 파일 추가... 명령은 시스템이 아닌 포트를 선택하면 루트가 아닌 권한을 설정합니다. 현재 Dockerfile 및 tasks.json이 루트가 아닌 사용을 위해 설정되지 않은 경우 컨테이너: 작업 영역에 Docker 파일 추가... 명령을 실행하고 1023보다 큰 포트를 선택하십시오. 이 명령은 현재 Dockerfile 및 tasks.json을 덮어씁니다. Python: 일반과 같은 일부 프로젝트 유형의 경우 Dockerfile 및 tasks.json을 수정해야 할 수 있습니다. Dockerfile 내에서 시스템이 아닌 포트를 노출하고 앱 코드에 대한 작업 디렉터리를 생성한 다음 앱 디렉터리에 액세스할 수 있는 루트가 아닌 사용자를 추가해야 합니다. 노출된 포트가 참조되는 모든 곳에서 업데이트되었는지 확인하십시오. 아래 예에서는 Gunicorn 포트가 노출된 포트와 일치하도록 업데이트해야 했습니다.
# 1024 or higher
EXPOSE 1024
# ... other directives such as installing requirements.txt file
# Creates /app in container if it does not already exist
# Ports code into /app
WORKDIR /app
ADD . /app
# Creates a non-root user and adds permission to access the /app folder
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
CMD ["gunicorn", "--bind", "0.0.0.0:1024", "pythonPath.to.wsgi"]
다음으로 tasks.json의 docker run 작업이 동일한 포트를 예상하는지 확인하십시오. 일반적으로 tasks.json에서 이전 포트 번호의 발생을 검색하고 새 포트 번호로 바꿀 수 있습니다. 다음 예에서는 Python Django 앱의 경우 필요한 변경 사항을 보여줍니다.
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": ["docker-build"],
"python": {
"args": [
"runserver",
"0.0.0.0:1024", //<- Change the number after the colon
"--nothreading",
"--noreload"
],
"file": "manage.py"
}
}
Linux에서 "connect EACCES /var/run/docker.sock" 오류
VS Code는 루트가 아닌 사용자로 실행되므로 확장에서 Docker에 액세스하려면 Linux 설치 후 단계의 "루트가 아닌 사용자로 Docker 관리" 섹션의 단계를 따라야 합니다.
컨테이너 탐색기에서 컨테이너 및 이미지가 사라졌습니다
이는 Microsoft에서 제작하지 않은 Docker Explorer라는 다른 확장과의 충돌로 인해 발생할 가능성이 높습니다. 이 문제를 해결하려면 vscode-docker 이슈 #1609에 설명된 해결 방법을 사용하십시오.
확장이 원격 컴퓨터에서 Docker를 찾지 못합니다
"연결 실패. Docker가 설치되어 실행 중입니까?" 오류 메시지
- 원격 컴퓨터에 Docker 엔진이 설치되어 있고 Docker CLI가 작동하는지 확인하십시오(터미널에서
docker ps를 실행하고 오류가 반환되지 않는지 확인). - 원격 개발 환경(SSH를 통한 원격 컴퓨터, WSL 하위 시스템, GitHub Codespace)을 사용하는 경우 컨테이너 도구 확장이 원격 및 로컬 모두에 설치되어 있는지 확인하십시오.
잘못된 URL 오류
원격 Docker 데몬에 연결해야 하는 경우 설정에서 containers.environment 속성 대신 Docker 컨텍스트를 사용하는 것이 좋습니다. 원격 Docker 데몬과 통신하기 위해 컨텍스트를 생성하고 사용하는 방법에 대한 이 가이드를 확인하십시오.
현재 사용 중인 Docker 컨텍스트를 재정의해야 하는 경우 DOCKER_HOST 환경 변수 또는 containers.environment.DOCKER_HOST 속성에 URL에 프로토콜이 포함되어 있는지 확인하십시오(예: ssh://myuser@mymachine 또는 tcp://1.2.3.4).
참고:
containers.environment.DOCKER_HOST속성은 Docker 컨텍스트를 재정의하고DOCKER_HOST환경 변수는containers.environment.DOCKER_HOST속성과 Docker 컨텍스트를 모두 재정의한다는 점을 명심하십시오.
팁: Powershell에서는
$ENV:DOCKER_HOST = 'ssh://username@1.2.3.4'를 사용하여 Docker 환경 변수를 변경할 수 있습니다.
질문 및 피드백
귀하의 피드백을 환영합니다! 아이디어나 제안이 있으시면 이슈를 신고해 주십시오.