невозможно запустить докер контейнер с ядром сети - PullRequest
0 голосов
/ 15 октября 2019

После рефакторинга из docker-compose в отдельный файл Docker для каждого проекта я не могу запустить контейнер, он просто завершается. Я использую и docker, и docker-compose, так как в будущем у меня будет больше проектов.

Мои файлы docker выглядят следующим образом.

docker-compose.yml

version: '3'

services:

  customer:
    image: customer
    container_name: customer
    build:
      context: ./Customer
      dockerfile: Dockerfile

Customer / Dockerfile

FROM mcr.microsoft.com/dotnet/core/runtime:2.2

WORKDIR /Customer

EXPOSE 80

COPY ./bin/Release/netcoreapp2.2/ service/

ENTRYPOINT ["dotnet", "service/Customer.dll"]

Также у меня было это в файле docker-compose ранее. Как мне сопоставить 6001 с 80 в Dockerfile?

ports:
  - 6001:80

Попытка 2

FROM mcr.microsoft.com/dotnet/core/sdk:2.2

WORKDIR /Customer

ENV DATABASE_HOST=database
ENV DATABASE_NAME=db
ENV DATABASE_USER=sa
ENV DATABASE_PASSWORD=Password

EXPOSE 80

COPY . .

CMD dotnet build

ENTRYPOINT ["dotnet", "Customer/bin/Release/netcoreapp2.2/Department.dll"]

Попытка 3

скопировано с основного сайта.

скопировано отсюда https://docs.docker.com/engine/examples/dotnetcore/

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Вы хотели запускать команды dotnet SDK? Пожалуйста, установите dotnet SDK из: https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

1 Ответ

1 голос
/ 15 октября 2019

Вот ленивый и простой файл докера. Я добавил несколько комментариев и несколько полезных опций сборки / отладки, например: «RUN ls -al» для отображения текущего каталога. Так же, как в Linux Linux.

# step 1 - building you app with SDK as base image
FROM microsoft/dotnet:2.2-sdk AS build-env # call the environment build
WORKDIR /build # create a work dir

COPY . . # you don't need copy everything to build your app, but this is for simplisity

RUN ls -al # linux command to list dir content

RUN cd /Customer && dotnet publish -o out # actually building the app and publishing to /out dir

RUN cd /Customer && ls -al # navigate to the folder you copied and list dir

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime # step 2, runtime env (slimmed down container)
WORKDIR /app # create workdir
COPY --from=build-env /<YOUR_BULD_PATH>/out ./ # copy from prev container build output

RUN ls -al # list again

ENTRYPOINT ["dotnet", "Department.dll", "--urls", "http://*:6001"] # example from .NET Core 2.2 webapi with port 6005, this might not be your case

Теперь, чтобы запустить docker-compose, просто укажите файл докера, как вы уже сделали. Но оба docker / docker-compose теперь должны нормально работать. Конечно, вам нужно немного подправить файл докера, я не знаю ваше приложение или структуру папок.

И просто совет: если вы хотите запускать файл докера как отдельный, не забывайте аргументы при запускеэто для сопоставления портов -> -p 6001: 80

...