도커 경고: 게시된 포트는 호스트 네트워크 모드를 사용할 때 삭제됩니다.
도커라이즈된 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
'source' 카테고리의 다른 글
파이어스토어에 많은 문서를 작성하는 가장 빠른 방법은 무엇입니까? (0) | 2023.06.23 |
---|---|
루비 문자열을 캡처된 정규식 패턴으로 바꿉니다. (0) | 2023.06.23 |
엑셀에서 비율을 A:B 형식으로 표시하려면 어떻게 해야 합니까? (0) | 2023.06.23 |
R - 패키지 로드 메시지 방지 (0) | 2023.06.23 |
MongoDB의 배열에 중첩된 하위 문서 제거 (0) | 2023.06.23 |