Azure容器实例(Windows)是否支持对表存储的访问

时间:2019-05-13 20:13:54

标签: java azure containers azure-table-storage

我有一个容器实例(Windows),该容器实例运行一个spring-boot应用程序,该应用程序从spring-boot CommandLineRunner中访问azure表存储。容器在本地运行良好(Docker / Win10 Pro)。

当我部署到容器实例时,在尝试从表中检索DynamicTableEntity时抛出StorageException。与存储帐户和表的连接似乎成功,但是检索操作失败。 Tomcat服务器正在运行并且响应迅速(我捕获到异常并准备了基本的错误信息,以供管理请求的servlet返回)。我无法找到有关在容器中使用Java Azure存储库的任何示例或权威性声明,所以我想知道是否存在任何限制,或在必要时进行解决。

下面是指示异常发生位置的日志。 我的代码生成带有“ CommandLineRunner”的日志条目。 我的应用程序中的397行是我尝试从表中检索DynamicTableEntity的行(进入日志的14行)。在此之前,将正确解析连接字符串,并生成对表的引用而不会出错。尽管未显示,但我对partitionKey和RowKey是正确的感到满意(并且例外是因为该表不存在-但是它存在,并且在容器本地运行时可以访问)。 562行是spring-boot CommandLineRunner的入口点。

    **2019-05-13 00:57:44.632  INFO 3060 --- [           main] a.c.n.sbtest.demo.DemoApplication        : CommandLineRunner: Engine Intialization Ready (status: 0)**
2019-05-13 00:57:44.670  INFO 3060 --- [           main] a.c.n.sbtest.demo.DemoApplication        : CommandLineRunner: Deployment table <Deployments> accessible
2019-05-13 00:57:44.687  INFO 3060 --- [           main] a.c.n.sbtest.demo.DemoApplication        : CommandLineRunner: User <e7c6163e-8c06-4146-b0e4-78fec93e6cce> Container accessible
2019-05-13 01:00:17.755  INFO 3060 --- [nio-8080-exec-7] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-05-13 01:00:17.755  INFO 3060 --- [nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-05-13 01:00:17.768  INFO 3060 --- [nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Completed initialization in 13 ms
com.microsoft.azure.storage.StorageException:
        at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:87)
        at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:209)
        at com.microsoft.azure.storage.table.QueryTableOperation.performRetrieve(QueryTableOperation.java:178)
        at com.microsoft.azure.storage.table.TableOperation.execute(TableOperation.java:694)
        at com.microsoft.azure.storage.table.CloudTable.execute(CloudTable.java:529)
        at com.microsoft.azure.storage.table.CloudTable.execute(CloudTable.java:496)
        at **ai.com.neuralstudio.sbtest.demo.DemoApplication.lambda$commandLineRunner$0(DemoApplication.java:562)**
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
        at **ai.com.neuralstudio.sbtest.demo.DemoApplication.main(DemoApplication.java:397)**
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.net.UnknownHostException: neuralstudiotest002.table.core.windows.net
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
        at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
        at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
        at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:115)
        ... 19 more
2019-05-13 01:00:29.420 ERROR 3060 --- [           main] a.c.n.sbtest.demo.DemoApplication        : CommandLineRunner: StorageException com.microsoft.azure.storage.StorageException:  (status: -3)

对于可能发生的一切见解,我将不胜感激。 杰克

更新: 尽管最新的Windows容器映像尚未解决根本问题,但jakaruna-MSFT在另一个论坛中做出了回应,并指出该映像较旧

mcr.microsoft.com/windows/servercore:1607-KB4505052-amd64

可以,而且可以。根本的问题显然与DNS服务有关,在过渡到较新的映像时已被破坏或忽略。无论有没有解释,MS大概都会解决后面的图像。

1 个答案:

答案 0 :(得分:0)

请参见上面的UPDATE。 尽管最新的Windows容器映像尚未解决根本问题,但jakaruna- MSFT在另一个论坛中做出了回应,并指出较旧的映像     mcr.microsoft.com/windows/servercore:1607-KB4505052-amd64

可以,而且可以。 根本的问题显然与DNS服务有关,在过渡到较新的映像时已被破坏或忽略。无论有没有解释,MS大概都会解决后面的图像。