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

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



답변

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

-p 8080 : 8080

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


답변

보낸 사람 : 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을 사용 하십시오.


답변

주요 정보는 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 네트워크 계층으로 컨테이너 네트워크 네임 스페이스에서 포트를 라우팅 / 전달할 수 있습니다. 그러나 매우 복잡 할 수 있습니다.


답변

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


답변