Memecahkan masalah kontainer SQL Server Docker

Berlaku untuk:SQL Server di Linux

Artikel ini membahas tentang kesalahan umum yang terlihat saat menyebarkan dan menggunakan kontainer SQL Server Docker, dan menyediakan teknik pemecahan masalah untuk membantu mengatasi masalah tersebut.

Kesalahan perintah docker

Jika Anda mendapatkan kesalahan saat menjalankan perintah docker apa pun, pastikan layanan Docker sedang berjalan, lalu coba jalankan dengan hak akses yang lebih tinggi.

Misalnya, di Linux, Anda mungkin mendapatkan kesalahan berikut saat menjalankan perintah docker:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Jika Anda mendapatkan kesalahan ini di Linux, coba jalankan perintah yang sama yang diawali dengan sudo. Jika itu gagal, pastikan bahwa layanan Docker berjalan, dan jalankan layanan tersebut jika perlu.

sudo systemctl status docker
sudo systemctl start docker

Di Windows, pastikan Anda membuka PowerShell atau Command Prompt sebagai administrator.

Important

Variabel SA_PASSWORD lingkungan tidak digunakan lagi. Gunakan MSSQL_SA_PASSWORD sebagai gantinya.

Kesalahan saat memulai kontainer SQL Server

Jika kontainer SQL Server gagal dijalankan, coba tes berikut:

  • Jika Anda mendapatkan kesalahan seperti failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use., Anda mencoba memetakan port kontainer 1433 ke port yang sudah digunakan. Ini dapat terjadi jika Anda menjalankan SQL Server secara lokal di komputer host. Ini juga dapat terjadi jika Anda memulai dua kontainer SQL Server dan mencoba memetakan keduanya ke port host yang sama. Jika ini terjadi, gunakan parameter-p untuk memetakan port kontainer 1433 ke port host yang berbeda. Contohnya:

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
    
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
    
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
    
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2025-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2025-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2025-latest`.
    

    Caution

    Kata sandi Anda harus mengikuti kebijakan password default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

  • Jika Anda mendapatkan kesalahan seperti 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 saat mencoba memulai kontainer, maka tambahkan pengguna Anda ke grup docker di Ubuntu. Kemudian keluar dan masuk lagi karena perubahan ini akan mempengaruhi sesi baru.

    usermod -aG docker $USER
    
  • Periksa untuk melihat apakah ada pesan kesalahan dari kontainer.

    docker logs e69e056c702d
    
  • Pastikan Anda memenuhi persyaratan minimum untuk memori dan disk yang ditentukan dalam bagian prasyarat pada artikel panduan memulai cepat.

  • Jika Anda menggunakan perangkat lunak manajemen kontainer apa pun, pastikan perangkat lunak tersebut mendukung proses kontainer yang berjalan sebagai root. Proses sqlservr dalam kontainer berjalan sebagai root.

  • Jika kontainer SQL Server Docker Anda keluar segera setelah memulai, periksa log docker Anda. Jika Anda menggunakan PowerShell di Windows dengan docker run perintah , gunakan tanda kutip ganda alih-alih tanda kutip tunggal. Dengan PowerShell Core, gunakan tanda kutip tunggal.

  • Tinjau penyiapan SQL Server dan log kesalahan.

Aktifkan pengambilan dump

Jika proses SQL Server gagal di dalam kontainer, Anda harus membuat kontainer baru dengan SYS_PTRACE diaktifkan. Ini menambahkan kemampuan Linux untuk melacak proses, yang diperlukan untuk membuat file cadangan pada pengecualian. File cadangan dapat digunakan oleh dukungan untuk membantu memecahkan masalah. Perintah jalankan docker berikut memungkinkan kemampuan ini.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -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=<password>" -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=<password>" -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=<password>' -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=<password>" -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=<password>" -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=<password>' -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=<password>" -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=<password>" -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=<password>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2025-latest

Caution

Kata sandi Anda harus mengikuti kebijakan password default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

Kegagalan koneksi SQL Server

Jika Anda tidak dapat tersambung ke instans SQL Server yang berjalan di kontainer Anda, coba pengujian berikut:

  • Pastikan kontainer SQL Server Anda sedang berjalan dengan melihat kolom STATUS pada keluaran docker ps -a. Jika tidak, gunakan docker start <Container ID> untuk memulainya.

  • Jika Anda memetakan ke port host selain default (bukan 1433), pastikan Anda juga menyertakan nomor port dalam string koneksi. Anda dapat melihat pemetaan port Anda di kolom PORTS dari outputdocker ps -a. Misalnya, perintah berikut menyambungkan sqlcmd ke kontainer yang mendengarkan di port 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>"
    
  • Jika Anda menggunakan docker run dengan volume data atau kontainer volume data yang sudah dipetakan, SQL Server mengabaikan nilai MSSQL_SA_PASSWORD. Sebagai gantinya, kata sandi akun sa yang telah dikonfigurasi sebelumnya digunakan dari data SQL Server dalam volume data atau kontainer volume data. Pastikan bahwa Anda menggunakan kata sandi sa yang terkait dengan data yang Anda lampirkan.

  • Tinjau pengaturan SQL Server dan log kesalahan.

Grup Ketersediaan SQL Server

Jika Anda menggunakan Docker dengan Grup Ketersediaan SQL Server, ada dua persyaratan tambahan.

  • Petakan port yang digunakan untuk komunikasi replika (default 5022). Misalnya, tentukan -p 5022:5022 sebagai bagian dari perintah Anda docker run .

  • Atur nama host kontainer secara eksplisit dengan parameter -h YOURHOSTNAME dari perintah docker run. Nama host ini digunakan saat Anda mengonfigurasi Grup Ketersediaan. Jika Anda tidak menentukannya melalui -h, secara default akan menggunakan ID kontainer.

Penyiapan SQL Server dan log kesalahan

Anda dapat melihat penyiapan SQL Server dan log kesalahan di /var/opt/mssql/log. Jika kontainer tidak berjalan, jalankan kontainer terlebih dahulu. Kemudian gunakan perintah interaktif untuk memeriksa log. Anda bisa mendapatkan ID kontainer dengan menjalankan docker ps perintah.

docker start <ContainerID>
docker exec -it <ContainerID> "bash"

Dari sesi bash di dalam wadah Anda, jalankan perintah berikut:

cd /var/opt/mssql/log
cat setup*.log
cat errorlog

Tip

Jika Anda memasang direktori host ke /var/opt/mssql saat membuat kontainer, Anda dapat melihat subdirektori log pada jalur yang dipetakan pada host.

Menjalankan perintah dalam kontainer

Jika Anda memiliki kontainer yang sedang berjalan, Anda dapat menjalankan perintah dalam kontainer dari terminal host.

Untuk mendapatkan ID kontainer, jalankan:

docker ps -a

Untuk memulai terminal bash dalam kontainer, jalankan:

docker exec -it <Container ID> /bin/bash

Sekarang Anda dapat menjalankan perintah seolah-olah Anda menjalankannya di terminal di dalam kontainer. Setelah selesai, ketik exit. Ini akan keluar dari sesi perintah interaktif, tetapi kontainer Anda tetap berjalan.

Berkontribusi pada dokumentasi SQL

Tahukah Anda bahwa Anda dapat mengedit konten SQL sendiri? Jika Anda melakukannya, Anda tidak hanya membantu meningkatkan dokumentasi kami, tetapi Anda juga dikreditkan sebagai kontributor ke halaman.

Untuk informasi selengkapnya, lihat Mengedit dokumentasi Microsoft Learn.