Соединиться с базой данных - docker -создать - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь создать один Docker файл Compose для WEB (reactJS), API (. NET Core 2.1) и SQL Экземпляр сервера.

Когда я инициализировать базу данных и запустить. NET с помощью do tnet cli, все работает (используя строку подключения Server=localhost). Однако, что я гуглил, так это то, что localhost не работает с контейнерами. И при использовании контейнера я не могу подключить свое ядро. NET к своему SQL серверу.

Может кто-нибудь пролить свет на то, что я делаю неправильно?

У меня есть это репо: https://github.com/lucasgozzi/sagetest

И я в настоящее время использую имена веток 'docker'. Вот мои Docker файлы и composer на тот случай, если вы не хотите клонировать репозиторий.

Backend dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:2.1
WORKDIR /src
COPY . .
RUN dotnet restore "./Api/Api.csproj"
RUN dotnet build "Api/Api.csproj" -c Release -o /app/build
RUN dotnet publish "Api/Api.csproj" -c Release -o /app/publish
EXPOSE 5000
WORKDIR /app/publish
ENTRYPOINT ["dotnet", "Api.dll"]

Внешний интерфейсный файл:

# base image
FROM node:12.2.0-alpine

# set working directory
WORKDIR /app
EXPOSE 3000

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY . .
RUN npm install --silent
RUN npm install react-scripts -g --silent

# start app
CMD ["npm", "start"]

Docker Составьте:

version: '3.1'

services:
  api:
    container_name: "teste-sage-api"
    image: 'teste-sage-api'
    build: 
      context: ./backend
      dockerfile: Dockerfile
    volumes:
      - ./backend:/var/www/backend
    ports:
      - "5000:5000"
    depends_on:
      - "database"
    networks:
      - sagetest-network
  web:
    container_name: "teste-sage-web"
    image: 'teste-sage-web'
    build: 
      context: ./frontend_react
      dockerfile: Dockerfile
    ports:
      - "3000:3000" 
    depends_on:
      - "api"
    networks:
      - sagetest-network
  database:
    container_name: "sql-server"
    image: "mcr.microsoft.com/mssql/server"
    environment:
      SA_PASSWORD: "Teste@123"
      ACCEPT_EULA: "Y"
    ports: 
      - "1433:1433"
    networks:
      - sagetest-network
networks:
  sagetest-network:
    driver: bridge 

1 Ответ

0 голосов
/ 17 марта 2020

Вы можете получить доступ к базе данных из ваших контейнеров по имени службы, в вашем случае это будет database. Но вы должны убедиться, что контейнер базы данных запущен и работает, прежде чем пытаться подключиться к нему. depends_on недостаточно для этого случая. вам может понадобиться реализовать waitfor в вашем контейнере do tnet. проверьте это для получения дополнительной информации https://docs.docker.com/compose/startup-order/

...