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, gunakandocker 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 output
docker 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 nilaiMSSQL_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 Andadocker run
.Atur nama host kontainer secara eksplisit dengan
-h YOURHOSTNAME
parameterdocker 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.
Konten terkait
- 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.
Menyebarkan dan menyambungkan ke kontainer SQL Server Docker
Mereferensikan konfigurasi dan kustomisasi tambahan ke kontainer Docker
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