Docker 컨테이너의 Wildfly가 시작되지 않습니다


10

Windows 10 Pro의 Docker 컨테이너에서 실행되는 Wildfly의 시작 페이지에 액세스하려고합니다. 이것이 내가 한 일입니다.

이미지를 뽑았다 :

docker pull jboss/wildfly

Wildfly 컨테이너를 실행하십시오 (Wildfly 로그에서 올바르게 작동한다는 것을 알 수 있습니다).

docker run -it -p 8080:8080 jboss/wildfly

컨테이너 ID를 찾으십시오.

docker ps

IP 주소를 검사하십시오.

docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78

IP 주소는 172.17.0.2브라우저에서 http://172.17.0.2:8080/으로 하지만 브라우저가 중단되고 시간 초과됩니다. 내가 무엇을 놓치고 있습니까?

최신 정보

나는 또한 시도했다 127.0.0.1:8080 작동하지 않습니다.

업데이트 2

콘솔 로그 :

docker --version

#Docker version 19.03.1, build 74b1e89e8a

docker run hello-world

#Hello from Docker!

docker run --detach --publish 8080:80 --name webserver nginx

#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest:  sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17

docker ps

#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver

답변 stackoverflow.com/a/43762751/7873775 및 10.0.75.1:8080 및 10.0.75.2:8080을 사용해보십시오.
Evgeniy Khyst

미안하지만 작동하지 않았습니다. 도커와 브라우저가 동일한 Windows 10 컴퓨터에서 실행되고 있습니다. 10.0.75.x외부 주소가 아니고 브라우저가 웹에서 찾으려고합니까?
ps0604

1
좋아, 문제를 찾아 보자. 다음 CLI 명령의 결과를 게시하십시오. 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. 그런 다음 localhost : 8080
Evgeniy Khyst

콘솔 로그로 업데이트 된 질문을 참조하십시오. 시도 localhost:8080하고 시간이 초과되었습니다. docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604

@ Evgeniy Khyst 도커 네트워킹에 대해 이야기하는 기사 를 찾았습니다 . 컨테이너 내부에서 실행되는 서버는 모든 인터페이스 (기사의 마지막 부분)를 수신해야한다고 말합니다.
ps0604

답변:


3

기본적으로 컨테이너를 만들면 해당 컨테이너의 포트가 외부에 게시되지 않습니다. 네트워크 172.17.XX는 내부에 있습니다. IP를 호스트 IP에 바인딩 해야하는 경우 다음과 같이 -p 플래그를 사용하여 docker container를 실행하십시오.

-p 8080 : 8080

컨테이너의 TCP 포트 8080을 Docker 호스트의 포트 8080에 매핑하십시오.


포트가 외부에 게시되지 않은 경우이 예제가 작동하는 이유는 무엇 입니까?
ps0604

@ 응답을 잘못 편집 했습니까? 질문을 보면 정확히 내가하고있는 일입니다.
ps0604

@ ps0604는 네트워크 문제가있는 것 같습니다. 귀하의 경우 검사 방화벽 규칙에서
이반 Vovk

당신의 대답이 틀렸습니까?
ps0604

내 대답은 문서 권장 사항을 기반으로하기 때문에 정확합니다.
Ivan Vovk

3

보낸 사람 : https://docs.docker.com/docker-for-windows/networking/

포트 포워딩은 localhost에서 작동합니다. --publish, -p 또는 -P가 ​​모두 작동합니다. Linux에서 노출 된 포트는 호스트로 전달됩니다.

따라서 http : // localhost : 8080 에서 액세스 할 수 있어야합니다 .


그래도 작동하지 않으면 Windows 예제를 사용해보십시오.

docker run -d -p 80:80 --name webserver nginx

액세스 가능한 http : // localhost : 80

https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples


그래도 실패하면 다음을 시도하십시오.

docker-machine ip default

http : // [docker-machine-ip] : 80을 사용 하십시오.


1
localhost : 8080에서 작동하지 않습니다. 죄송합니다
ps0604

jboss / wildfly에 문제가 있는지 또는 Windows 네트워킹에 문제가 있는지 확인하기 위해 위에 게시 한 예제를 사용해 볼 수 있습니까?
Tyhal

그리고의 nginx는 작동하지 않습니다 당신은 '고정 표시기 기계의 IP 기본'을 실행하고 localhost 대신 거기에 IP를 사용하려고 할 수있는 경우
Tyhal

0

주요 정보는 Docker container in Windows 10 ProWindows 용 Docker 작동 방식에 대한 매우 일반적인 사양입니다. 많은 옵션이 예있을 수 Docker for Windows없는 /와 Linux containers,Docker toolbox 원격 예, ...

일반적으로 Windows의 Docker 컨테이너는 일반적으로 일종의 가상 머신 (Hyper-V, Virtualbox 등)에서 실행됩니다. 따라서 Windows 네트워크 네임 스페이스에서 직접 액세스 할 수없는 추가 네트워크 계층이 있습니다. 그러나 링크 된 예제 는이 추가 네트워크 계층이 존재하지 않는 Linux 시스템에서 실행됩니다. 이것이 Linux에서 복사 / 붙여 넣기 예제가 작동하지 않는 이유입니다. 평소와 같이 컨테이너를 실행하고 포트 8080을 노출하십시오.

docker run -it -p 8080:8080 jboss/wildfly

그러나 내부 도커 네트워크는 Windows에서 액세스 할 수 없기 때문에 액세스 용 IP가 다르고 컨테이너 IP를 사용할 수 없습니다. 오히려 Windows OS의 IP를 사용하십시오. 결국 사용한 문서를 확인하십시오Docker on Windows 솔루션의 하고 노출 된 포트에 사용되는 IP를 찾으십시오.

고급 창 / 리눅스 네트워킹 기술이 있다면 중간 VM 네트워크 계층을 통해 Windows 네트워크 계층으로 컨테이너 네트워크 네임 스페이스에서 포트를 라우팅 / 전달할 수 있습니다. 그러나 매우 복잡 할 수 있습니다.


Jan, Windows 용 Docker Desktop을 설치 하고 이미지를 다운로드 한 후 위의 자습서에서 설명한대로 Wildfly 컨테이너를 실행했습니다. 콘솔에서 나는 그것이 잘 시작되는 것을 보았습니다. 이것은 8080:8080이론적으로 작동하지만 작동하지 않습니다. 네트워킹에 대해 잘 모르겠습니다. 어디에서 찾아야합니까?
ps0604

@ ps0604 Linux 튜토리얼을 맹목적으로 따르려면 Linux를 사용하십시오. 나는 문서를 언급 한 바와 같이 당신의 친구입니다 - docs.docker.com/docker-for-windows/networking 명시 적으로이 언급되어있다 There is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.. 그 제한을 처리하십시오.
Jan Garaj

0

같은 문제에 직면 한 Windows 시스템에서 일하는 동료가 있습니다. 그는 많은 노력을 기울 였고 어디에서도 갈 수 없었습니다. Docker Desktop에서 Windows 용으로 발생하는 이상한 일이 많이 있습니다. 우리는 마침내 윈도우즈 용 리눅스 서브 시스템을 설치하고 거기에 도커를 설치했고 그때부터 그를 위해 매력처럼 작동했습니다. Windows를 고수하고 Linux 하위 시스템을 작업하는 데 신경 쓰지 않으려면 해당 경로로 내려가는 것이 좋습니다. 우리는 Jan Garaj가 제안한 것보다 더 나아가서 시간 낭비라는 것을 알았습니다. Windows 용 Docker Desktop은 개발자 컨테이너 등을 사용하여 완전히 작업 할 수있는 환경을 의미합니다. Host-Container는 어려움이 있습니다.


예, 동의합니다. Windows 대신 Ubuntu에서 컨테이너를 만들 것입니다. 문제가 없습니다. 유일한 것은 Windows에서 개발한다는 것이므로 개발하는 동안 Windows에서 한 번, Linux 컨테이너에서, 마지막으로 컨테이너를 클라우드에 업로드 할 때 세 번 테스트해야합니다. Windows에서 컨테이너를 실행할 수 있으면 두 번만 테스트합니다.
ps0604

이것이 제가 리눅스 서브 시스템을 제안한 이유입니다. 실제로 컨텍스트를 3 번, 2 ~ 2.5 번 변경할 필요가 없습니다.)
Sam Thomas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.