>  기사  >  백엔드 개발  >  Golang 테스트 컨테이너, 네트워크를 작동시킬 수 없습니다

Golang 테스트 컨테이너, 네트워크를 작동시킬 수 없습니다

WBOY
WBOY앞으로
2024-02-14 13:30:091062검색

Golang testcontainers,无法使网络工作

php 편집기 딸기는 Golang 테스트 컨테이너를 사용할 때 문제가 발생했습니다. 즉, 네트워크가 제대로 작동하지 못하게 되었습니다. Golang testcontainers는 테스트에서 컨테이너를 실행하기 위한 도구로, 개발자가 테스트 환경에서 컨테이너를 빠르게 시작하고 제거하는 데 도움이 됩니다. 그러나 실제 사용에서 PHP 에디터인 Strawberry는 컨테이너 내에서 네트워크 기능을 정상적으로 사용할 수 없어 테스트에서 특정 문제가 발생한다는 사실을 발견했습니다. 다음에는 이 문제에 대한 해결책을 함께 살펴보겠습니다.

질문 내용

마이크로서비스에서 몇 가지 테스트를 생성하려고 하며 데이터베이스 테스트 컨테이너(postgres)와 마이크로서비스 테스트 컨테이너를 연결할 네트워크를 생성하고 싶습니다. 아무리 노력해도 마이크로서비스를 데이터베이스에 연결할 수 없습니다. 내 마이크로서비스는 Fiber와 Gorm을 사용하는 golang입니다. 다음과 같이 db.go 구성 파일에서 데이터베이스에 연결하려고 합니다.

으아악

내 테스트 컨테이너는 다음과 같습니다.

으아악 으아악

단순히 docker에서 네트워크 연결 과정에서 무슨 일이 일어나는지 이해하지 못해서일지도 모르지만, HOST와 DB_PORT에 대한 환경을 설정할 때(나는 태양 아래에서 모든 조합을 시도했습니다), 정말 헤매었습니다. 데이터베이스에 연결된 마이크로서비스를 거부합니다

내가 시도한 마이크로서비스의 테스트 컨테이너에서:

으아악

prescriptionDBHost의 추출 방법은 다음과 같습니다.

으아악

결과:

오류 메시지가 나타납니다. 으아악

그런 다음 호스트 이름에서 "/"를 제거해 보았습니다. 예:

으아악

저도 시도해 봤습니다:

으아악 으아악 으아악

여기의 마지막 4개 예는 모두 일종의 전화 접속 TCP 오류를 발생시킵니다. 예:

으아악

또한 데이터베이스 컨테이너를 생성한 후 테스트 컨테이너를 디버깅하고 중지한 다음 마이크로서비스로 이동하여 DB_HOST=localhost 및 port=를 사용하여 컨테이너에 대한 연결을 하드코딩했는데 제대로 작동했기 때문에 무슨 일이 일어나고 있는지 정말 알 수 없었습니다. 뭔가 잘못되었습니다 . 제가 생각할 수 있는 유일한 것은 데이터베이스에 연결을 시도하기 전에 마이크로서비스 컨테이너가 네트워크에 연결되지 않았다는 것입니다. Docker 네트워크 검사를 수행한 결과 데이터베이스 컨테이너는 연결되어 있지만 마이크로서비스는 연결되지 않은 것을 볼 수 있습니다(단지 다른 이유 때문일까요?).

솔루션

다음을 수행할 수 있습니다.

으아악

주의NetworkAliases的配置方式;在您的代码中,您将两者都设置为 db-network 但是,我想,这是由于误解。该设置配置了一个可以引用容器的别名(在本例中,我使用 postgres 作为 postgres 容器;这意味着当连接 HOST 时,根据上面示例中使用的 URL,postgres 将是 postgres).

또는 port, err :=处方DBContainer.MappedPort(context.Background(), "5432/tcp") 获取主机上公开的端口,然后连接到端口上的 host.docker.internal port.Port().当被测试的应用程序在主机上而不是在容器中运行时,经常使用此方法(但在这种情况下,您将连接到 localhost 并使用从 MappedPort()반환 보고서를 사용할 수도 있습니다.

위 내용은 Golang 테스트 컨테이너, 네트워크를 작동시킬 수 없습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제