Как соединить образы докеров ASP.NET Core (сначала код) и SQL-сервер

Я работаю над проектом на 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, все работает

Как соединить образы докеров ASP.NET Core (сначала код) и SQL-сервер

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": {}
    }
]
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
2 936
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно это происходит потому, что Docker создает собственную внутреннюю сеть для контейнеров, и поэтому два контейнера по умолчанию не видят друг друга. Итак, у вас есть два варианта:

  1. Создайте сеть докеров и подключите два контейнера к этой сети.

Создайте новую сеть:

docker network create <networkName>

Чтобы подключить контейнер к определенной сети, выполните следующие действия:

– Подключиться к сети при запуске контейнера с помощью docker run и флага —network. Что-то вроде этого (обратите внимание на сетевой флаг)

docker run -dit --name <containerName> --network <networkName> <imageName>

– Подключить уже созданный контейнер к сети с помощью

docker network connect <networkName> <containerName>
  1. Используйте docker-compose для настройки обоих образов (это мой предпочтительный вариант). Docker compose автоматически создает сеть и настраивает контейнеры для работы в этой сети.

После того, как вы настроили сеть, вы сможете получить доступ от контейнера к контейнеру, используя containerName:PortNumber

Если контейнеры по-прежнему не могут общаться друг с другом:

– Убедитесь, что они оба действительно в одной сети: запустив docker network inspect

– Проверить, доступен ли другой станок (изнутри контейнера)

ping <dockerContainerName>
ping <dockerContainerIPaddress>

– Проверьте, открыт ли соответствующий порт

nmap -p <portnumber> <dockerContainerIPaddress>

Спасибо! Я попробую.

Divyang Desai 15.07.2019 19:46

Создал сеть, но проблема осталась, добавил проверку сети к вопросу.

Divyang Desai 16.07.2019 03:31

Как вы сейчас пытаетесь соединиться между контейнерами, это должно быть continerName:portNumber. Можете ли вы пропинговать один контейнер изнутри другого контейнера?

camba1 16.07.2019 05:12

Да, я использую тот же containername:portnumber, но выдает ошибку Ошибка установки: база данных не существует или у вас нет прав для подключения к ней.

Divyang Desai 16.07.2019 19:33

это странно. Вы можете пропинговать контейнер db из контейнера приложения? Оба контейнера теперь находятся в одной сети и должны иметь возможность общаться друг с другом.

camba1 16.07.2019 20:16

Я думаю, мне нужно попробовать с docker compose сейчас

Divyang Desai 17.07.2019 06:41

Да, docker compose имеет больше смысла и является простым способом одновременного запуска нескольких образов!

Divyang Desai 18.07.2019 09:17

Хотя я не знаю, почему отдельные лица в одной сети не работают.

Divyang Desai 18.07.2019 09:18

Другие вопросы по теме