2017-05-22 1 views
2

VirtualBox의 VM에 도커가 설치되어 있고 호스트 컴퓨터의 MySQL 데이터베이스에 연결하는 닷 Net Core 응용 프로그램으로 컨테이너를 실행하려고합니다. 그래서 나는 가상 박스에서 mysql과 내 애플리케이션 모두를위한 포워딩 포트를 설정했다. 호스트 컴퓨터에서 "http://localhost:3131/api/users/login"을 통해 내 서비스에 액세스 할 수 있지만 MySQL 데이터베이스에 연결할 수 없다는 오류가 발생합니다. 도커를 사용하지 않을 때 호스트 시스템에서 앱을 실행할 수도 있습니다. 인터넷에서 다른 스레드를 살펴 보았지만, 아래에 표시된 마지막 명령을 제외하고는 정확하게 깨달았지만 MySQL 인증이 구성 되었기 때문에 실행할 수 없습니다. 구성 파일이 아닌 응용 프로그램에 하드 코딩되어 있습니다.Docker 컨테이너가 호스트 컴퓨터의 MySQL에 액세스하지 않습니다

Program.cs

var host = new WebHostBuilder() 
    .UseKestrel() 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
    .UseIISIntegration() 
    .UseStartup<Startup>() 
    .UseApplicationInsights() 
    .UseUrls("http://*:80") 
    .Build(); 

Dockerfile

FROM microsoft/aspnetcore 

WORKDIR /app 

COPY bin/Release/PublishOutput/ . 

EXPOSE 80 

ENTRYPOINT ["dotnet", "UsersApi.dll"] 

도커 명령 실행

docker run -d -p 3000:80 user_api 
// and also tried 
docker run -d -p 3000:80 user_api --net=host 
// and also tried 
docker run -d -p 3000:80 user_api --add-host localhost:127.0.0.1 

버추얼 fowarding 포트 :

NAT 3131 -> 3000 tcp 
NAT 3306 -> 3306 tcp 
NAT 2415 -> 22  
012을 다음과 같이 일반적인 구성은 3,516,

로컬 호스트 (나는 그것이 포트 3131를 나타납니다,하지만 어쨌든 서비스를 호출 생각했다.) 내가 추가해야하지만이 절차의 확실하지 않다 생각 Dockfile에서

Starting Nmap 7.40 (https://nmap.org) at 2017-05-22 11:23 E. South America Standard Time 

Nmap scan report for localhost (127.0.0.1) 

Host is up (0.0013s latency). 

Other addresses for localhost (not scanned): ::1 

rDNS record for 127.0.0.1: rinaldipc.com 

Not shown: 994 closed ports 

PORT  STATE SERVICE 

22/tcp open ssh 

135/tcp open msrpc 

445/tcp open microsoft-ds 

2179/tcp open vmrdp 

3306/tcp open mysql 

5357/tcp open wsdapi 

RUN 명령 .

RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf 

https://stackoverflow.com/questions/33827342/how-to-connect-mysql-workbench-to-running-mysql-inside-docker/33827463#33827463 

답변

1

VirtualBox 내부에서 실행 중이므로 VirtualBox 호스트 컴퓨터와 도커 사이에 다른 레이어가 있습니다. VirtualBox (1) -> Linux in VirtualBox (2) -> docker (3)를 호스팅하는 컴퓨터가 있습니다.

docker (3)의 "localhost"는 (2) mysql이 켜져있을 것으로 예상 함을 의미합니다 (2). 귀하의 경우에는 mysql on (1)이 있습니다.

(3)에서 (1)에 액세스하는 유일한 방법은 "localhost"별명이 아닌 (1)의 IP를 명시 적으로 사용하는 것입니다.

+0

그래서 (1) localhost를 입력하면 (3)에 액세스 할 수 있습니까? 3131 연결이 양방향으로 연결되지 않습니까? 그러면 (3)에서 (1)의 mysql에 액세스 할 수 있습니까? (빅터에게 인내심을 가져 주셔서 감사합니다) –

관련 문제