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위에 정의 된 컨테이너 포트와 호스트 포트를 매핑 EXPOSEDockerfile.
예 :

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.