SQL Server Docker 컨테이너 문제 해결
적용 대상:SQL Server - Linux
이 문서에서는 SQL Server Docker 컨테이너 배포 및 사용 시 발생하는 일반적인 오류를 설명하고, 문제 해결에 도움이 되는 문제 해결 기술을 제공합니다.
Docker 명령 오류
명령에 대한 docker
오류가 발생하는 경우 Docker 서비스가 실행 중인지 확인하고 관리자 권한으로 실행하려고 합니다.
예를 들어 Linux에서 명령을 실행할 docker
때 다음 오류가 발생할 수 있습니다.
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Linux에서 이 오류가 발생하면 앞에 와 같은 sudo
명령을 실행해 보세요. 이 명령이 실패하면 docker 서비스가 실행되고 있는지 확인하고, 필요한 경우 서비스를 시작합니다.
sudo systemctl status docker
sudo systemctl start docker
Windows에서 PowerShell 또는 명령 프롬프트를 관리자 권한으로 시작했는지 확인합니다.
Important
SA_PASSWORD
환경 변수는 사용되지 않습니다. 대신 MSSQL_SA_PASSWORD
을 사용합니다.
SQL Server 컨테이너 시작 오류
SQL Server 컨테이너가 실행되지 않는 경우 다음 테스트를 시도합니다.
failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.
등과 같은 오류가 발생하면 컨테이너 포트 1433을 이미 사용 중인 포트에 매핑하려고 시도하는 것입니다. 호스트 컴퓨터에서 SQL Server를 로컬로 실행하는 경우 이 오류가 발생할 수 있습니다. 두 개의 SQL Server 컨테이너를 시작하고 둘 다 동일한 호스트 포트에 매핑하려고 하는 경우에도 발생할 수 있습니다. 이 문제가 발생할 경우-p
매개 변수를 사용하여 컨테이너 포트 1433을 다른 호스트 포트에 매핑합니다. 예시:docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
컨테이너를 시작할 때와 같은
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: permission denied
오류가 발생하는 경우 Ubuntu의 Docker 그룹에 사용자를 추가합니다. 그런 다음, 이 변경 내용이 새 세션에 영향을 미치면 로그아웃하고 다시 로그인합니다.usermod -aG docker $USER
컨테이너의 오류 메시지가 있는지 확인합니다.
docker logs e69e056c702d
빠른 시작 문서의 필수 조건 섹션에 지정된 최소 메모리 및 디스크 요구 사항을 충족하는지 확인합니다.
컨테이너 관리 소프트웨어를 사용하는 경우 소프트웨어가 루트로 실행 중인 컨테이너 프로세스를 지원하는지 확인합니다. 컨테이너의 sqlservr 프로세스는 루트로 실행됩니다.
SQL Server Docker 컨테이너가 시작 후 즉시 종료되는 경우 Docker 로그를 확인합니다.
docker run
명령을 사용하여 Windows에서 PowerShell을 사용하는 경우 작은따옴표 대신 큰따옴표를 사용합니다. PowerShell Core에서는 작은따옴표를 사용합니다.
덤프 캡처 사용
컨테이너 내에서 SQL Server 프로세스가 실패하는 경우 SYS_PTRACE 사용하도록 설정된 새 컨테이너를 만들어야 합니다. 그러면 예외 발생 시 덤프 파일을 만드는 데 필요한 Linux 프로세스 추적 기능이 추가됩니다. 덤프 파일은 지원에서 문제를 해결하는 데 사용할 수 있습니다. 다음 docker 실행 명령을 사용하면 이 기능을 사용할 수 있습니다.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
SQL Server 연결 실패
컨테이너에서 실행되는 SQL Server 인스턴스에 연결할 수 없는 경우 다음 테스트를 시도합니다.
출력의 STATUS 열을 확인하여 SQL Server 컨테이너가 실행 중인지 확인합니다
docker ps -a
. 그렇지 않은 경우 시작하는 데 사용합니다docker start <Container ID>
.기본값이 아닌 호스트 포트(1433이 아님)에 매핑한 경우 연결 문자열에 포트를 지정해야 합니다. 출력의 PORTS 열에서 포트 매핑을
docker ps -a
볼 수 있습니다. 예를 들어 다음 명령은 sqlcmd를 포트 1401에서 수신 대기하는 컨테이너에 연결합니다.sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
기존 매핑된 데이터 볼륨 또는 데이터 볼륨 컨테이너와 함께 사용하는
docker run
경우 SQL Server는 해당 값을MSSQL_SA_PASSWORD
무시합니다. 대신, 데이터 볼륨 또는 데이터 볼륨 컨테이너의 SQL Server 데이터에서 미리 구성된 SA 사용자 암호를 사용합니다. 연결 중인 데이터와 연결된 SA 암호를 사용하고 있는지 확인합니다.
SQL Server 가용성 그룹
SQL Server 가용성 그룹과 함께 Docker를 사용하는 경우 두 가지 추가 요구 사항이 있습니다.
복제본(replica) 통신에 사용되는 포트를 매핑합니다(기본값 5022). 예를 들어 명령의 일부로 지정
-p 5022:5022
합니다docker run
.명령의
docker run
매개 변수를 사용하여-h YOURHOSTNAME
컨테이너 호스트 이름을 명시적으로 설정합니다. 이 호스트 이름은 가용성 그룹을 구성할 때 사용됩니다.-h
를 사용하여 지정하지 않으면 기본적으로 컨테이너 ID로 설정됩니다.
SQL Server 설정 및 오류 로그
/var/opt/mssql/log에서 SQL Server 설정 및 오류 로그를 확인할 수 있습니다. 컨테이너가 실행되고 있지 않으면 먼저 컨테이너를 시작합니다. 그런 다음 대화형 명령 프롬프트를 사용하여 로그를 검사합니다. 명령을 docker ps
실행하여 컨테이너 ID를 가져올 수 있습니다.
docker start <ContainerID>
docker exec -it <ContainerID> "bash"
컨테이너 내의 bash 세션에서 다음 명령을 실행합니다.
cd /var/opt/mssql/log
cat setup*.log
cat errorlog
팁
컨테이너를 만들 때 /var/opt/mssql에 호스트 디렉터리를 탑재한 경우 대신 호스트의 매핑된 경로에 있는 로그 하위 디렉터리를 볼 수 있습니다.
컨테이너에서 명령 실행
실행 중인 컨테이너가 있는 경우 호스트 터미널에서 컨테이너 내에서 명령을 실행할 수 있습니다.
컨테이너 ID를 실행하려면 다음을 수행합니다.
docker ps -a
컨테이너에서 bash 터미널을 시작하려면 다음을 실행합니다.
docker exec -it <Container ID> /bin/bash
이제 컨테이너 내부 터미널에서 실행하는 것처럼 명령을 실행할 수 있습니다. 완료되면 .를 입력합니다 exit
. 대화형 명령 세션이 종료되지만 컨테이너는 계속 실행됩니다.
관련 콘텐츠
- 빠른 시작을 통해 Docker에서 SQL Server 2017 컨테이너 이미지를 시작합니다.
- 빠른 시작을 통해 Docker에서 SQL Server 2019 컨테이너 이미지를 시작합니다.
- 빠른 시작을 통해 Docker에서 SQL Server 2022 컨테이너 이미지를 시작합니다.
SQL 설명서에 참여하세요
SQL 콘텐츠를 직접 편집할 수 있다는 것을 알고 계셨나요? 직접 편집하면 설명서가 개선될 뿐만 아니라 페이지에 참여자로 기입됩니다.
자세한 내용은 SQL Server 설명서에 기여하는 방법을 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기