Docker로 둘 이상의 포트를 노출시키는 방법은 무엇입니까?


답변:


715

하나의 포트만 노출 시키려면 다음과 같이하십시오.

docker run -p <host_port>:<container_port>

여러 포트를 표시하려면 여러 -p인수 를 제공하십시오 .

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>

4
감사! 여기에 문서에서이 발견 : docs.docker.com/userguide/dockerlinks/... 가 말한다Note: The -p flag can be used multiple times to configure multiple ports.
— 테드 M. 젊은

구성 파일에서 포트를 지정하는 방법이 있습니까? 예를 들어 --env-file?
— Giovanni Bitliner

8
난 아직도이 꽤 새로운 해요,하지만 난 확신 당신과 함께 Dockerfile에서 포트를 정의 할거야 @GiovanniBitliner 에 노출 후 수행 docker run -P자동 Dockerfile에에 노출로 정의 된 모든 포트를 노출하는 (대문자주의)
— 테드 에이버리

시스템화 된 서비스 파일에서 여러 포트가 초기화 프로세스를 중지시킬 수 있습니까?
— Lanti

1
나는 여기에 올바른 용어가 publish아니라고 생각합니다 expose.
— tgogos

289

1 단계

당신의에서 Dockerfile, 당신은 동사를 사용하여 EXPOSE여러 포트를 노출.
예 :

EXPOSE 3000 80 443 22

2 단계

그런 다음 위를 기반으로 새 이미지를 만들고 싶습니다 Dockerfile.
예 :

docker build -t foo:tag .

3 단계

그럼 당신은 사용할 수 있습니다 -p위에 정의 된 컨테이너 포트와 호스트 포트를 매핑 EXPOSE의 Dockerfile.
예 :

docker run -p 3001:3000 -p 23:22

다양한 연속 포트를 노출하려면 다음과 같이 docker를 실행할 수 있습니다.

docker run -it -p 7100-7120:7100-7120/tcp 

17
EXPOSE는 공개 된 포트에 대해서만 문서화되며 링크에만 유용합니다. 전체 포트 목록은 -P를 사용하여 찾을 수 있으며 호스트에서 사용 가능한 포트에 자동으로 매핑됩니다.
— Arun Gupta

4
노출이 필요하지 않습니다. 첫 번째 단계를 제거하거나 선택 사항으로 만드십시오.
— AmirHossein

27

docker-compose.yml파일 을 사용하는 경우 :

services:
    varnish:
        ports:
            - 80
            - 6081

호스트 / 네트워크 포트를 지정할 수도 있습니다

varnish:
    ports:
        - 80:80
        - 6081:6081

0

이미지에서 컨테이너를 작성하고 여러 포트를 공개하려는 경우 (게시 아님) 다음 명령을 사용할 수 있습니다.

docker create --name container name--expose 7000 --expose 7001image name

이제 docker start명령을 사용하여이 컨테이너를 시작하면 위의 구성된 포트가 노출됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.