第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java Testcontainers - 無(wú)法連接到公開端口

Java Testcontainers - 無(wú)法連接到公開端口

POPMUISE 2023-09-20 14:58:15
我使用 javax.mail 實(shí)現(xiàn)了 POP3 服務(wù)器和客戶端,只是為了嘗試使用 Docker 進(jìn)行集成測(cè)試。因此,我基于 openjdk:8-jre 映像創(chuàng)建了兩個(gè) Docker 映像,并將我的 jar 復(fù)制到其中并啟動(dòng)它。根據(jù)我的配置(見(jiàn)下文),它正在工作。他們正在互相交談。但是,由于想要進(jìn)行多個(gè)集成測(cè)試,為每個(gè)測(cè)試構(gòu)建一個(gè)映像并啟動(dòng)它們將是一件很乏味的事情。我也不知道如何自動(dòng)化結(jié)果。但后來(lái)我偶然發(fā)現(xiàn)了 TestContainers,這似乎對(duì)實(shí)施這些測(cè)試有很大幫助。因此,我開始使用 POP3 服務(wù)器映像作為 GenericContainer 將這些測(cè)試移植到 TestContainers,并在 JUnit 測(cè)試方法中啟動(dòng)我的 POP3 客戶端類。我公開了 POP3 服務(wù)器正在偵聽(tīng)的端口 24999。但是當(dāng)我嘗試連接到服務(wù)器時(shí),出現(xiàn)以下錯(cuò)誤:com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 32782; timeout -1;  nested exception is:    java.net.ConnectException: Connection refused...TestContainers 中可能缺少一些設(shè)置。請(qǐng)你幫助我好嗎。這是我正在使用的代碼:public class DockerPop3AutocryptKeyProvidingAndReceivingTest {    @Test    public void test() throws InterruptedException {        GenericContainer container = new GenericContainer<>("immerfroehlich/emailfilter:latest")                .withExposedPorts(24999);                container.start();                String host = container.getContainerIpAddress();        String port = container.getFirstMappedPort().toString();        //The following is simplified, but copied from the working jar used in the Docker Client image/container        MyPOP3Client client = new MyPOP3Client(host, port);        client.connect();                container.stop();    }}這就是我創(chuàng)建 Docker 鏡像的方式:FROM openjdk:8-jreADD build/distributions/MyPOP3Server.tar . #This is where I have packed all the needed files to. It gets unpacked by Docker.#EXPOSE 24999 #I tried both with and without this exposeWORKDIR /MyPOP3Server/binENTRYPOINT ["sh","MyPOP3Server"] #Executes the shell script which runs java with my jar這是在 Server Jar 內(nèi)運(yùn)行的代碼的簡(jiǎn)化版本:MyPOP3Server server = new MyPOP3Server();server.listenToPort(24999);請(qǐng)告訴我我錯(cuò)過(guò)了什么。這里有什么問(wèn)題嗎?謝謝并致以親切的問(wèn)候。
查看完整描述

4 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

其他答案中有一些很好的建議;我將用其他一些技巧來(lái)補(bǔ)充這些內(nèi)容:

正如已經(jīng)建議的:

  • 絕對(duì)要添加,LogConsumer以便您可以看到容器的日志輸出 - 也許現(xiàn)在或?qū)?lái)會(huì)出現(xiàn)一些有用的東西。擁有它總是好的。

  • 在容器啟動(dòng)后、啟動(dòng)客戶端之前設(shè)置斷點(diǎn)。

此外,我希望以下事情能夠有所作為。在斷點(diǎn)處暫停時(shí):

  • docker ps -a在終端中運(yùn)行

  • 首先,檢查您的容器是否正在運(yùn)行并且尚未退出。如果它已退出,請(qǐng)從終端查看容器的日志。

  • 其次,檢查輸出中的端口映射docker ps。您應(yīng)該看到類似的內(nèi)容0.0.0.0:32768->24999/tcp(盡管第一個(gè)端口號(hào)是隨機(jī)的)。

  • 在您的 IDE 中進(jìn)行評(píng)估container.getFirstMappedPort()并檢查您返回的端口號(hào)是否與隨機(jī)公開的端口相同。除非您在本地計(jì)算機(jī)上安裝了非常不尋常的 Docker,否則應(yīng)該可以通過(guò)localhost:+ 此端口訪問(wèn)此容器。

  • 如果您已經(jīng)走到這一步,那么容器或客戶端代碼可能有問(wèn)題。nc您可以嘗試將不同的客戶端連接到正在運(yùn)行的容器 -如果您手邊沒(méi)有另一個(gè) POP3 客戶端,甚至類似的操作也會(huì)有所幫助。

另一件可以嘗試的事情是手動(dòng)運(yùn)行容器,只是為了減少發(fā)生的間接數(shù)量。您給出的 Testcontainers 代碼片段相當(dāng)于:

docker run -p 24999 immerfroehlich/emailfilter:latest

您可能會(huì)發(fā)現(xiàn)這可以幫助您將問(wèn)題空間劃分為更小的部分。


查看完整回答
反對(duì) 回復(fù) 2023-09-20
?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

嘗試添加 http 檢查。

 new GenericContainer<>("immerfroehlich/emailfilter:latest")
 .withExposedPorts(24999)
 .waitingFor(new HttpWaitStrategy().forPort(24999)
 .withStartupTimeout(Duration.ofMinutes(5)));

您的容器可能已啟動(dòng),但您嘗試在服務(wù)器初始化之前進(jìn)行連接。

另外,注冊(cè)一個(gè)日志附加程序以查看容器內(nèi)服務(wù)器的運(yùn)行情況。

 .withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger(
              DockerPop3AutocryptKeyProvidingAndReceivingTest.class)))


查看完整回答
反對(duì) 回復(fù) 2023-09-20
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

這引導(dǎo)我找到解決方案。這是缺少 WaitStrategy 和端口映射問(wèn)題的結(jié)合。


這是我所做的:1)在 MyPop3Server.listenToPort(String port) 方法中,我添加了一個(gè) System.out.println:


public class MyPop3Server {

  public void listenToPort(String port) {

     //simplified: do initialization and listenToPort

     System.out.println("Awaiting Connection...");

  }

}

在我的測(cè)試中,我添加了一個(gè) LogMessageWaitStrategy 來(lái)偵聽(tīng)“等待連接”


GenericContainer container = new GenericContainer<>("immerfroehlich/emailfilter:latest")

   .waitingFor(Wait.forLogMessage("Awaiting Connection.*", 1))

   .withExposedPorts(24999);

2)我從container.getFirstMappedPort()切換到


container.getMappedPort(24999);

這是整個(gè)更改后的工作測(cè)試代碼:


public class DockerPop3AutocryptKeyProvidingAndReceivingTest {

    @Test

    public void test() throws InterruptedException {

        GenericContainer container = new GenericContainer<>("immerfroehlich/emailfilter:latest")

                .waitingFor(Wait.forLogMessage("Awaiting Connection.*", 1))

                .withExposedPorts(24999);


        container.start();


        String host = container.getContainerIpAddress();

        String port = container.getMappedPort(24999).toString();


        //The following is simplified, but copied from the working jar used in the Docker Client image/container

        MyPOP3Client client = new MyPOP3Client(host, port);

        client.connect();


        container.stop();

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-09-20
?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

試試container.getMappedPort(24999)getFirstMappedPort??赡苣?docker 映像公開了幾個(gè)端口。



查看完整回答
反對(duì) 回復(fù) 2023-09-20
  • 4 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)