Memecahkan masalah kontainer SQL Server Docker

Berlaku untuk:SQL Server - 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 untuk perintah docker apa pun, pastikan bahwa layanan docker berjalan, dan coba jalankan dengan izin yang ditinggikan.

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 dengan sudo. Jika perintah tersebut gagal, verifikasi layanan docker berjalan, dan mulai jika perlu.

sudo systemctl status docker
sudo systemctl start docker

Di Windows, verifikasi bahwa Anda meluncurkan PowerShell atau prompt perintah Anda sebagai Administrator.

Penting

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

Kesalahan startup 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=<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`.
    
  • 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 memori dan disk minimum yang ditentukan di bagian prasyarat dari artikel mulai 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 akar.

  • 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 kuotasi tunggal.

  • Tinjau penyiapan SQL Server dan log kesalahan.

Aktifkan pengambilan cadangan

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=<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

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 berjalan dengan melihat kolom docker ps -a STATUS output. Jika tidak, gunakan docker start <Container ID> untuk memulainya.

  • Jika Anda memetakan ke port host non-default (bukan 1433), pastikan Anda menentukan port di string koneksi Anda. 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 pengguna SA yang telah dikonfigurasi sebelumnya digunakan dari data SQL Server dalam volume data atau kontainer volume data. Verifikasi bahwa Anda menggunakan kata sandi SA yang terkait dengan data yang Anda lampirkan.

  • Tinjau penyiapan 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 -h YOURHOSTNAME parameter docker run perintah . Nama host ini digunakan saat Anda mengonfigurasi Grup Ketersediaan. Jika Anda tidak menentukannya dengan -h, itu default ke 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, pertama-tama mulai kontainer. 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. Terminal ini keluar dalam sesi perintah interaktif, tetapi kontainer Anda terus berjalan.

  • Mulai menggunakan gambar kontainer SQL Server 2017 di Docker dengan melalui mulai cepat.
  • Mulai menggunakan gambar kontainer SQL Server 2019 di Docker dengan melalui mulai cepat.
  • Mulai menggunakan gambar kontainer SQL Server 2022 di Docker dengan melalui mulai cepat.

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 Cara berkontribusi pada dokumentasi SQL Server