Partilhar via


Solucionar problemas de contêineres do SQL Server Docker

Aplica-se a:SQL Server em Linux

Este artigo fala sobre erros comuns observados ao implantar e usar contêineres do SQL Server Docker e fornece técnicas de solução de problemas para ajudar a resolver o problema.

Erros de comando do Docker

Se você receber erros para qualquer docker comando, verifique se o serviço docker está em execução e tente executar com permissões elevadas.

Por exemplo, no Linux, você pode obter o seguinte erro ao executar docker comandos:

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

Se você receber esse erro no Linux, tente executar os mesmos comandos precedidos do sudo. Se isso falhar, verifique se o serviço docker está em execução e inicie-o, se necessário.

sudo systemctl status docker
sudo systemctl start docker

No Windows, verifique se você está iniciando o PowerShell ou seu prompt de comando como Administrador.

Importante

A variável de ambiente SA_PASSWORD foi preterida. Utilize MSSQL_SA_PASSWORD em substituição.

Erros de inicialização do contêiner do SQL Server

Se o contêiner do SQL Server falhar ao ser executado, tente os seguintes testes:

  • Se você receber um erro como failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use., está tentando mapear a porta de contêiner 1433 para uma porta que já está em uso. Isso pode acontecer se você estiver executando o SQL Server localmente na máquina host. Isso também pode acontecer se você iniciar dois contêineres do SQL Server e tentar mapeá-los ambos para a mesma porta de host. Se isso acontecer, use o -p parâmetro para mapear a porta de contêiner 1433 para uma porta de host diferente. Por exemplo:

    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`.
    

    Atenção

    A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.

  • Se você receber um erro, como 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 ao tentar iniciar um contêiner, adicione seu usuário ao grupo docker no Ubuntu. Em seguida, saia e faça login novamente, pois essa alteração afetará novas sessões.

    usermod -aG docker $USER
    
  • Verifique se há alguma mensagem de erro do contêiner.

    docker logs e69e056c702d
    
  • Certifique-se de atender aos requisitos mínimos de memória e disco especificados na seção de pré-requisitos do artigo de início rápido.

  • Se você estiver usando qualquer software de gerenciamento de contêiner, verifique se ele suporta processos de contêiner executados como root. O processo sqlservr no contêiner é executado como root.

  • Se o contêiner do SQL Server Docker sair imediatamente após o início, verifique os logs do docker. Se você estiver usando o PowerShell no Windows com o docker run comando, use aspas duplas em vez de aspas simples. Com o PowerShell Core, use aspas simples.

  • Revise a instalação do SQL Server e os logs de erros.

Habilitar capturas de despejo

Se o processo do SQL Server estiver falhando dentro do contêiner, você deverá criar um novo contêiner com SYS_PTRACE habilitado. Isso adiciona a capacidade do Linux de rastrear um processo, que é necessário para criar um arquivo de despejo em uma exceção. O arquivo de despejo pode ser usado pelo suporte para ajudar a solucionar o problema. O comando docker run a seguir habilita esse recurso.

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

Quando implementar um contentor para SQL Server 2025 (17.x) ou uma versão posterior, utilize MSSQL_PID=DeveloperStandard a edição Standard Developer e MSSQL_PID=Developer a edição Enterprise Developer.

Atenção

A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.

Falhas de conexão do SQL Server

Se você não puder se conectar à instância do SQL Server em execução em seu contêiner, tente os seguintes testes:

  • Certifique-se de que seu contêiner do SQL Server está em execução examinando a coluna STATUS da docker ps -a saída. Se não, use docker start <Container ID> para iniciá-lo.

  • Se você mapeou para uma porta de host não padrão (não 1433), certifique-se de estar especificando a porta em sua cadeia de conexão. Você pode ver seu mapeamento de porta na coluna PORTS da docker ps -a saída. Por exemplo, o comando a seguir conecta o sqlcmd a um contêiner escutando na porta 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>"
    
  • Se você usou docker run com um volume de dados mapeado existente ou contêiner de volume de dados, o SQL Server ignorará o valor de MSSQL_SA_PASSWORD. Em vez disso, a senha de conta pré-configurada sa é usada a partir dos dados do SQL Server no volume de dados ou no contêiner de volume de dados. Verifique se está a utilizar a sa palavra-passe associada aos dados que está a anexar.

  • Revise a instalação do SQL Server e os logs de erros.

Grupos de disponibilidade do SQL Server

Se você estiver usando o Docker com Grupos de Disponibilidade do SQL Server, há dois requisitos adicionais.

  • Mapeie a porta usada para comunicação de réplica (padrão 5022). Por exemplo, especifique -p 5022:5022 como parte do seu docker run comando.

  • Defina explicitamente o nome do host do contêiner com o -h YOURHOSTNAME parâmetro do docker run comando. Esse nome de host é usado quando você configura seu Grupo de Disponibilidade. Se você não especificá-lo com -h, o padrão será o ID do contêiner.

Configuração do SQL Server e logs de erros

Você pode examinar a instalação do SQL Server e os logs de erro em /var/opt/mssql/log. Se o contêiner não estiver em execução, primeiro inicie-o. Em seguida, use um prompt de comando interativo para inspecionar os logs. Você pode obter o ID do contêiner executando o comando docker ps.

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

A partir da sessão bash dentro do contêiner, execute os seguintes comandos:

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

Sugestão

Se você montou um diretório host em /var/opt/mssql quando criou seu contêiner, poderá procurar no subdiretório log no caminho mapeado no host.

Executar comandos em um contêiner

Se você tiver um contêiner em execução, poderá executar comandos dentro do contêiner a partir de um terminal host.

Para executar o ID do contêiner:

docker ps -a

Para iniciar um terminal bash na execução do contêiner:

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

Agora você pode executar comandos como se estivesse executando-os no terminal dentro do contêiner. Quando terminar, digite exit. Isso é encerrado na sessão de comando interativa, mas seu contêiner continua a ser executado.

Contribuir para a documentação do SQL

Você sabia que você mesmo pode editar conteúdo SQL? Se o fizer, não só ajudará a melhorar a nossa documentação, como também será creditado como contribuidor da página.

Para obter mais informações, consulte Editar a documentação do Microsoft Learn.