Este equipo de expertos pasados varios días de trabajo y de juntar de datos, han obtenido los datos necesarios, deseamos que resulte útil para ti en tu proyecto.
Esto me llevó un tiempo resolverlo, hay una serie de pequeños problemas que pueden estar mal, lo que lo hace frustrante. Esto puede volverse aún más frustrante ya que el proyecto Visual Studio 2017 de la aplicación web central .NET que se genera automáticamente no funciona de inmediato. Tener esta experiencia como su primera exposición a Docker no es lo ideal.
Inicialmente, también supuse incorrectamente que la imagen de la ventana acoplable vendría con SQL Server dentro del contenedor, este no es el caso, está tratando de acceder al servidor de la base de datos que debe estar preinstalado en la máquina host.
Pasos a seguir (probado para una imagen acoplable de Windows, en lugar de Linux);
1) Obtenga la dirección IP de su máquina host ejecutando un símbolo del sistema y escribiendo IPCONFIG
2) Establecer la conexión a la base de datos string dentro de su archivo appsettings.json a esta dirección IP, seguido del número de puerto de SQL Server, es decir;
192.168.XX,1433
3) Establecer la conexión string no usar Trusted_Connection (eliminar esto de la conexión string) y código duro en el ID de Usuario y Contraseña;
ID de usuario=sa;Contraseña=Contraseña supersegura;
Si no hiciera esto, en ciertas configuraciones de SQL Server obtendría un error inusual (¡no puedo recordar los detalles!)
El show de cadena de conexión se parece a esto;
“Server=192.168.XX,1433;Database=MyDatabase;User Id=sa;Password=SuperSecurePassword;MultipleActiveResultSets=true”
4) ahora en la máquina host, debe abrir el firewall de Windows y agregar una nueva regla de conexión entrante para el puerto TCP 1433.
5) Después de todo esto, y todavía no funciona, intente reiniciar; Luché durante mucho tiempo y tuve que reiniciar, lo que le dio vida; No estoy seguro de que Docker se haya inicializado correctamente, ¡aunque esto es principalmente especulación! Realmente no me gusta decir que reiniciar es una solución para los problemas, no es realmente una respuesta, pero en ciertos casos funciona.
editar, una última cosa, ejecutar Visual Studio en modo administrador (icono de clic derecho, “ejecutar como administrador”) también ayuda.
Se disculpa por la resurrección de un hilo antiguo, pero este problema parece existir y la información disponible es un poco irregular sobre cómo solucionarlo, considerando la pequeña cantidad de cosas que se deben hacer.
Así que lo que ha funcionado para mí es:
public static string DockerHostMachineIpAddress => Dns.GetHostAddresses(new Uri("http://docker.for.win.localhost").Host)[0].ToString();
docker.for.win.localhost es una dirección que el dns interno de docker resolverá como localhost (no localhost dentro de docker sino la máquina de alojamiento). El código anterior le proporciona una dirección IP de su host local y puede crear una conexión string como esto:
$"Server=DockerHostMachineIpAddress\SQL2017;Database=YourDB;User Id=Admin;Password=123;"
Esto funcionará si está utilizando una instancia de servidor sql con nombre: reemplace SQL2017 con su nombre de instancia y credenciales con el usuario correcto.
¡SIN EMBARGO! Para migraciones y actualización de base de datos localhost funciona bien. Probablemente porque no se maneja desde el contenedor docker.
EDITAR:
La segunda solución es un poco más limpia, pero debe tener un proyecto que admita docker-compose.
En el archivo docker-compose.yml en la definición de su servicio debajo de la definición de propiedad de imagen, agregue:
extra_hosts:
- "localhost:192.168.65.2"
Todavía tiene que saber para qué dirección IP (que puede averiguar usando la respuesta original) tiene que agregar un alias, pero una vez que lo sabe, es un poco más limpio. En más de 5 máquinas diferentes en las que trabajé esta IP es correcta.
Tuve el mismo problema, seguí el mismo enfoque que en el sitio web que mencionaste. Debería funcionar así si tiene las redes con configuración estándar.
Simplemente deshabilite el firewall de su red pública.
Mi problema era simplemente que Windows parecía clasificar la red creada por Docker como red pública y, por lo tanto, el firewall la bloqueó, al igual que para esta:
No se puede conectar a SQL Server Express desde la aplicación .net core que se ejecuta en docker
No está marcado allí como una respuesta, sino editado en la pregunta.
Comentarios y valoraciones de la guía
Puedes confirmar nuestro trabajo escribiendo un comentario y dejando una valoración te lo agradecemos.