source

도커 경고: 게시된 포트는 호스트 네트워크 모드를 사용할 때 삭제됩니다.

factcode 2023. 6. 23. 22:28
반응형

도커 경고: 게시된 포트는 호스트 네트워크 모드를 사용할 때 삭제됩니다.

도커라이즈된 Springboot 앱이 있습니다.좌현에 노출되어 있습니다.8081예상대로 접근할 수 있습니다.

http://<ipaddress>:8081

문제

도커 컨테이너의 Springboot 앱은 컨테이너가 아닌 동일한 호스트의 postgres 데이터베이스에 연결해야 하지만 호스트 네트워크에 대한 액세스 권한을 부여하지 않은 것으로 나타납니다.

localhost:5432에 대한 연결이 거부되었습니다.

도커 cmd:

docker run -t --rm -d -p 8081:8081 --name nexct-approval-service-container nexct-approval-service-image

네트워크에 연결하기 위해 다음을 사용할 수 있습니다.

--network host 

그러나 응용 프로그램 자체(포트 8081)에 대한 액세스 허용을 중지합니다.

WARNING: Published ports are discarded when using host network mode

질문.

포트 8081에서 SpringBoot 앱에 대한 액세스를 허용하고 SpringBoot 앱이 데이터베이스에 연결할 수 있도록 호스트 네트워크에 대한 액세스를 허용하려면 어떻게 해야 합니까?


갱신하다

데이터베이스 연결은 Spring Boot:

application.properties

spring.datasource1.driver-class-name=org.postgresql.Driver
spring.datasource1.jdbc-url=jdbc:postgresql://localhost:5432/pims
spring.datasource1.username=postgres
spring.datasource1.password=

다중DBConfig.java

@Configuration
@ComponentScan(basePackages = "com.nexct")
public class MultipleDBConfig {

    @Bean(name = "datasource1")
    @ConfigurationProperties("spring.datasource1")
    @Primary
    public DataSource dataSource1(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "datasource2")
    @ConfigurationProperties("spring.datasource2")
    public DataSource dataSource2(){
        return DataSourceBuilder.create().build();
    }
}

제가 복무할 때, 저는 다음의 언급을 대체했습니다.localhost와 함께host.docker.internal그리고 컨테이너의 포트를 공개할 수 있었습니다.-p를 사용하지 않고 로컬 호스트의 서비스에 연결할 수 있습니다.--network host내 서비스는 호스트 이름이 있는 .env 파일을 참조하기 때문에 업데이트된 호스트 이름으로 다른 .env 파일을 만들었습니다.

네트워크 모드 호스트에서는 포트를 게시할 수 없습니다.

참고: 용기 자체가 없는 경우IP-address사용 시host mode networking포트 매핑이 적용되지 않고 -p, --publish, -P 및 --publish-all 옵션이 무시되고 대신 경고가 생성됩니다.

호스트 네트워킹

포트 8081에서 SpringBoot 앱에 대한 액세스를 허용하고 SpringBoot 앱이 데이터베이스에 연결할 수 있도록 호스트 네트워크에 대한 액세스를 허용하려면 어떻게 해야 합니까?

여전히 연락이 되지 않습니다.Host호스트 네트워크를 컨테이너에 할당하여 네트워크를 구성합니다.호스트 네트워크에 연결하려면 호스트 IP를 사용하거나 Mac 및 창에 특수 DNS를 사용할 수 있습니다.

host.docker.internal:DB_PORT

또는 Linux를 사용하는 경우 호스트 IP를 사용할 수 있습니다.

HOST_IP:DB_PORT

또는 시도할 수 있습니다(Ubuntu에서 작동).

docker run -it --rm -e HOST_IP=$(ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p') image_name

지금 사용HOST_IP호스트 이름으로 사용할 수 있습니다.

변경해야 합니다.localhost연결 문자열:

172.17.0.1컨테이너 네트워크의 IP 주소입니다.

그럼 다시 확인해보세요.

언급URL : https://stackoverflow.com/questions/63068636/docker-warning-published-ports-are-discarded-when-using-host-network-mode

반응형