Я работаю над проектом на nopCommerce и пытаюсь запустить его с помощью изображений докеров. Есть два изображения, одно для nopCommerce, а второе для сервера MSSQL. Вот шаг, который я выполнил,
1) Создайте образ докера и запустите его на порту 8080.
C:\Users\Admin>docker run -d -p 8080:80 --name mystore nop420
ca626cc5ed4e3759a03e9645dcd374016a5d8f278ffede8e1345f851f9a82c7d
Проект работает на порту 8080
2) Вытащил образ MSSQL(Express) Linux из Докер Хаб
3) Запустил его с помощью команды
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu
4) docker exec -it unruffled_tharp "bash"
5) /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'yourStrong(!)Password'
6) Создал БД
7) Попытался подключить образ MSSQL с помощью расширения VSCode, все работает
8) Передал ту же строку подключения на страницу установки nopCommerce.
Data Source=localhost;Initial Catalog=nop420;User ID=sa;Password=yourStrong(!)Password
Но выдает ошибку
Setup failed: An error occurred while creating the database: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
Я пробовал использовать IP вместо localhost, добавляя порт 1433 и почти все с разных форумов, хотя ошибка остается той же.
Редактировать: Вот проверка сети
$ docker network inspect 6cb
[
{
"Name": "mynetwork",
"Id": "6cb7171b74ee08a55d4ab8c9a26518bfb0a21ee5d8894300a7151453925f550d",
"Created": "2019-07-16T01:13:46.4791178Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"ca626cc5ed4e3759a03e9645dcd374016a5d8f278ffede8e1345f851f9a82c7d": {
"Name": "mystore",
"EndpointID": "dbe46ebc4208bbce5d29c55c40bc0a0809ff3196da5ce7360c6e1a6771fcb7be",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"ca7b383ff3d5118aa15183728084e355619eb28b47d6e60c885a9e5c5af795ba": {
"Name": "nostalgic_northcutt",
"EndpointID": "6ec4ae69ba2586ce432471e82dcecc94e598e9f9c18f59ef2b557a317adf4736",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]





Обычно это происходит потому, что Docker создает собственную внутреннюю сеть для контейнеров, и поэтому два контейнера по умолчанию не видят друг друга. Итак, у вас есть два варианта:
Создайте новую сеть:
docker network create <networkName>
Чтобы подключить контейнер к определенной сети, выполните следующие действия:
– Подключиться к сети при запуске контейнера с помощью docker run и флага —network. Что-то вроде этого (обратите внимание на сетевой флаг)
docker run -dit --name <containerName> --network <networkName> <imageName>
– Подключить уже созданный контейнер к сети с помощью
docker network connect <networkName> <containerName>
После того, как вы настроили сеть, вы сможете получить доступ от контейнера к контейнеру, используя containerName:PortNumber
Если контейнеры по-прежнему не могут общаться друг с другом:
– Убедитесь, что они оба действительно в одной сети: запустив docker network inspect
– Проверить, доступен ли другой станок (изнутри контейнера)
ping <dockerContainerName>
ping <dockerContainerIPaddress>
– Проверьте, открыт ли соответствующий порт
nmap -p <portnumber> <dockerContainerIPaddress>
Создал сеть, но проблема осталась, добавил проверку сети к вопросу.
Как вы сейчас пытаетесь соединиться между контейнерами, это должно быть continerName:portNumber. Можете ли вы пропинговать один контейнер изнутри другого контейнера?
Да, я использую тот же containername:portnumber, но выдает ошибку Ошибка установки: база данных не существует или у вас нет прав для подключения к ней.
это странно. Вы можете пропинговать контейнер db из контейнера приложения? Оба контейнера теперь находятся в одной сети и должны иметь возможность общаться друг с другом.
Я думаю, мне нужно попробовать с docker compose сейчас
Да, docker compose имеет больше смысла и является простым способом одновременного запуска нескольких образов!
Хотя я не знаю, почему отдельные лица в одной сети не работают.
Спасибо! Я попробую.