从主机访问Docker内部的Jetty服务器
我一直在尝试使用docker compose部署Jetty服务器,但我似乎无法从主机上使用我的应用程序端口 这是我的compose.yml:从主机访问Docker内部的Jetty服务器,docker,jetty,docker-compose,Docker,Jetty,Docker Compose,我一直在尝试使用docker compose部署Jetty服务器,但我似乎无法从主机上使用我的应用程序端口 这是我的compose.yml: version: '3.3' networks: app-network: services: db: image: postgres:alpine command: postgres -c hba_file=/etc/pg_hba.conf environment: POSTGRES_USER: *****
version: '3.3'
networks:
app-network:
services:
db:
image: postgres:alpine
command: postgres -c hba_file=/etc/pg_hba.conf
environment:
POSTGRES_USER: ******
POSTGRES_PASSWORD: ******
volumes:
- postgresVolume:/var/lib/postgresql/data
- ./pg_hba.conf:/etc/pg_hba.conf
networks:
app-network:
aliases:
- mydb
app:
build: .
restart: always
ports:
- "7001:7001"
depends_on:
- db
networks:
- app-network
volumes:
postgresVolume:
当我跑步时:
docker-compose up --build
一切开始都很好。但我似乎无法从主机访问api:
curl -H "Content-Type: application/json" -X POST -d '{"username":"user","password":"superPass"}' http://localhost:7001/user/ --trace-ascii ./dump
我得到:
== Info: Trying ::1...
== Info: TCP_NODELAY set
== Info: Connected to localhost (::1) port 7001 (#0)
=> Send header, 136 bytes (0x88)
0000: POST /user/ HTTP/1.1
0016: Host: localhost:7001
002c: User-Agent: curl/7.58.0
0045: Accept: */*
0052: Content-Type: application/json
0072: Content-Length: 42
0086:
=> Send data, 42 bytes (0x2a)
0000: {"username":"user","password":"superPass"}
== Info: upload completely sent off: 42 out of 42 bytes
== Info: Empty reply from server
== Info: Connection #0 to host localhost left intact
运行
iptables -t nat -L -n
给出:
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE all -- 172.19.0.0/16 0.0.0.0/0
MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.19.0.3 172.19.0.3 tcp
dpt:7001
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:7001 to:172.19.0.3:7001
编辑:
运行nmap本地主机
对我来说这两个都很好
docker-compose ps
似乎也是正确的:
Name Command State Ports
-----------------------------------------------------------------------------------
app_1 java -server -Xms2g -Xmx2g ... Up 0.0.0.0:7001->7001/tcp
db_1 docker-entrypoint.sh postg ... Up 5432/tcp
我的Jetty服务器似乎在正确的ip和端口上侦听:
2018-02-07 18:47:34.379 [main] INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@62452cc9{HTTP/1.1,[http/1.1, h2c]}{0.0.0.0:7001}
有人知道我做错了什么吗?我在运行Arch Linux
docker-compose version
docker-compose version 1.18.0, build unknown
docker-py version: 2.7.0
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017
谢谢好的,那么。。。在这里,杰蒂是我的错。我没有料到这一点,只是将我的HTTP服务器实现更改为Netty解决了这个问题,而没有修改我的代码或配置
也许我应该通知Jetty?根据curl响应,通信正常,只有服务器不知道如何处理您的请求,您确定您的应用程序已配置为接受JSON吗?也许你需要一些额外的标题。我想如果你进入容器应用程序并运行相同的命令,你会得到相同的响应,这可以消除docker问题,你可以关注应用程序问题是的,我的应用程序在本地运行时运行良好。这就是为什么meI在这两种情况下都运行了完全相同的postman查询,但它只在运行locally时起作用。您可以使用-verbose和update问题运行curl吗?端口是否已打开且可用?你能试试本地主机上的nmap看看有什么问题吗?
docker-compose version
docker-compose version 1.18.0, build unknown
docker-py version: 2.7.0
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017