Docker를 사용하여 라즈베리 파이에서 asp.net 핵심 애플리케이션을 실행하려고 하는데 주요 부분을 완료한 것 같습니다. 간단한 asp.net 핵심 프로젝트인 github에 저장소가 있습니다. 내 github 저장소에 푸시할 때마다 설정되는 docker 클라우드에 계정이 설정되어 있습니다.
docker가 내 저장소를 내 pi로 가져오도록 했습니다.
다음 명령을 실행하면
docker run -d -p 8080:80 joro550/radiusnet --network=host
실행되는 것을 볼 수 있습니다.
그러나 포트 8080에서 파이의 IP 주소에 액세스하면 다음과 같은 결과가 나타납니다.
내가 이것을 찾고 있었을 때 사람들은 다음 플래그를 추가할 것을 제안했습니다(나는 동일한 결과로 시도했습니다:
- docker run 명령에 --network=host 추가
- docker run 명령에 -it 추가
- Docker 파일에 Expose 80 추가
이제 나는 이 일에 접근하는 방법을 조금 잃어버린 것 같습니다. 도커 문서에서는 실행을 권장합니다.
`docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp`
Windows 10 Nano 컨테이너를 사용하는 경우 사용하고 있다는 것이 믿기지 않지만 이 명령을 실행하면 큰 소리가 납니다.<no value>
다시 전환하면 docker inspect -f "{{ .NetworkSettings.IPAddress }}" myapp
내 IP 내부 IP 주소와 다른 IP 주소가 제공됩니다. 포트 8080에서 시도했지만 동일한 결과를 얻었습니다.
두 주소를 모두 컬링하면 동일한 연결 거부 결과가 나타납니다.
관심 있는 사람을 위한 내 도커 파일은 다음과 같습니다.
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY /src ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out -r linux-arm
# build runtime image
FROM microsoft/dotnet:2.0.0-runtime-stretch-arm32v7
WORKDIR /app
COPY --from=build-env /app/src/RadiusNet.Web/out .
EXPOSE 80
ENTRYPOINT ["dotnet", "RadiusNet.Web.dll"]
더 많은 정보가 필요하면 문의해 주세요. 저는 Docker를 처음 접했기 때문에 현재 상황에 대해 약간의 지식 덤프를 수행했습니다.
Github 프로젝트 링크(필요한 경우):https://github.com/joro550/RadiusNet
어떤 도움이라도 - 지금은 크게 감사하겠습니다.
답변1
먼저 몇 가지 설명
- Dockerfile에서 "EXPOSE 80"은 "docker run -P", "publish all"에서 사용됩니다.
- docker가 제공하지 않는 포트를 게시하는 것은 쓸모가 없습니다(예: 서비스가 포트 5000에서 실행 중인 경우 "-p 8000:80")
수신 포트는 "docker 포트"에 의해 보고되지만 제공된다는 보장은 없습니다.
# docker run --name radiusnet -p 8001-8009:5000/tcp radiusnet
Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
# docker port radiusnet
5000/tcp -> 0.0.0.0:8001
그 증거는 푸딩에 있다..
# wget -O /tmp/test.html http://localhost:8001/
--2018-02-08 16:22:46-- http://localhost:8001/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:8001... connected.
HTTP request sent, awaiting response...
실패하면 잘못된 포트가 게시된 것입니다.
"--network 호스트"로 시작하면 "docker 포트"는 docker 서비스가 정상인 동안 아무 것도 보고하지 않을 수 있습니다. "lsof"가 도움이 될 수 있습니다.
# docker run --name radiusnet --network host radiusnet
Hosting environment: Production
Content root path: /app
Now listening on: http://localhost:5000
# docker port radiusnet
# ps -ef | grep dotnet
root 540 27973 0 16:46 pts/2 00:00:00 grep dotnet
root 32452 32437 7 16:37 ? 00:00:43 dotnet RadiusNet.Web.dll
# lsof -Pn -p 32452 | grep LISTEN
dotnet 32452 root 368u IPv4 106845 0t0 TCP 127.0.0.1:5000 (LISTEN)
dotnet 32452 root 383u IPv6 106854 0t0 TCP [::1]:5000 (LISTEN)
# wget -O /tmp/test.html http://localhost:5000/
--2018-02-08 16:56:27-- http://localhost:5000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:5000... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘/tmp/test.html’
모든 것이 잘되고, 모든 것이 잘됩니다.