我已经设置了一个java应用程序,它充当Web服务器并处理http请求。我已经测试过它在容器外面工作了(它确实如此),但是在容器中我的请求似乎没有达到它。
服务器侦听端口3971,Dockerfile如下所示:
FROM java:8
ADD VaultServer /
EXPOSE 3971
EXPOSE 3972
ENTRYPOINT ["java", "-jar", "VaultServer.jar"]
调用根地址应该返回一些东西(通常我会发送一个GET到http://localhost:3971/)。
我尝试用docker-machine的ip地址替换'localhost',并且在检查我的服务器的运行容器时用ip地址替换,但似乎都没有响应。当我调用docker-machine的ip地址时,我得到了ERR_CONNECTION_REFUSED。我需要启用其他东西吗?
答案 0 :(得分:13)
你正在做EXPOSE 3972,它将端口暴露给其他链接的容器,但不暴露给主机
要将端口暴露给您执行的主机...
docker run -p 3972:3972 ....... etc
你也可以......
docker run -P
暴露EXPOSE暴露给主机的所有端口(这不是默认值 - 你必须在这里使用-P标志)
答案 1 :(得分:1)
您正在使用Docker Toolbox吗?
就我而言,正常的docker安装在Windows 10上无法正常运行,因此我必须安装Docker工具箱。 docker工具箱添加了一个虚拟机,其中docker运行了所有容器。
例如,要访问我的dockerized应用,我必须使用:http://192.168.99.100:8080/app。
在这里,192.168.99.100是虚拟机ip。
希望对您有帮助!!!!
答案 2 :(得分:0)
使用html中的“action =”http://192.168.99.100:8080/rest/data/ingest“来引用您的Docker容器的Rest路径。请参阅底部HTML代码,第4行。
http://192.168.99.100:8080/rest/data/ingest细分:
1)192.168.99.100:8080 = Docker的IP地址&港口 #。
2)/ rest / =在你的web.xml文件中
3)data / = @Path(“/ data”)
4)/ ingest = @Path(“/ ingest”)
HTML CODE:
<html>
<body>
<h1>Data Ingest: Web Uploader</h1>
<form action="http://192.168.99.100:8080/rest/data/ingest" method="post" enctype="multipart/form-data">
<p>Select files
: <input type="file" name="file" size="10000000" multiple/> </p>
<input type="submit" value="Upload Files"/>
</form>
</body>
</html>
JAVA CODE:
@Path("/data")
public class YourClass {
@POST
@Path("/ingest")
public Response yourMethod (...){
}
答案 3 :(得分:0)
我可以向您展示我如何使用其他容器(MSSQL和Elasticsearch)构建dotnet核心项目,也许它会对您有所帮助。
要docker-compose.yml为另一个容器添加依赖项:
services:
prime.web:
image: prime.web
build:
context: ./Prime.Web
dockerfile: Dockerfile
links:
- sql.data
- elasticsearch
sql.data:
image: microsoft/mssql-server-linux
elasticsearch:
image: elasticsearch
并在docker-compose.override.yml中写入,您将覆盖您的appsetting文件,并将访问另一个容器:
services:
prime.web:
environment:
- 'ConnectionStrings:primekinetics=Server=tcp:sql.data,1433;InitialCatalog=prime;User ID=sa;Password=Pass@word;Connection Timeout=30;'
- 'ElasticSearchConnection=http://elasticsearch:9200/'
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5105:80"
sql.data:
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
ports:
- "5433:1433"
elasticsearch:
ports:
- "9200:9200"
我希望它会有所帮助。