[英]Unable to connect to Docker container: Connection Refused
我在linux ec2
上將一個war文件部署為Docker
容器。 但是,當我嘗試點擊http://ec2-elastic-ip:8080/AppName
,沒有任何反應。
我為http
和https
設置了所有security group
入站規則。 所以這不是問題。
調試
我嘗試通過ssh-ing
linux實例進行調試。 嘗試使用命令curl localhost:8080
,這是響應:
curl: (7) Failed to connect to localhost port 8080: Connection refused
嘗試使用127.0.0.1:8080
但響應相同。
我要做的下一件事是列出Docker容器: docker ps
。 我得到:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<ID> <ecr>.amazonaws.com/<my>-registry:2019-05-16.12-17-02 "catalina.sh run" 24 minutes ago Up 24 minutes 0.0.0.0:32772->8080/tcp ecs-app-24-name
現在,我使用docker exec -it <name> /bin/bash
連接到該容器,並嘗試檢查tomcat日志,這清楚地表明我的應用程序大戰已經開始,並且tomcat已經開始。
我曾經嘗試檢查docker-machine ip default
但這給了我錯誤:
Docker machine "default" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
現在卡住了。 無法進一步調試。 期望的結果是通過上面的URL訪問應用程序。
該怎么辦? 發生問題了嗎?
另外,整個基礎架構都是通過terraform
管理的。 我首先創建基礎映像,使用DockerFile
將戰爭復制到DockerFile
,推送注冊表映像,最后進行terraform apply
以應用所有更改。
當前,您的應用程序在隨機主機端口(即32772
,請參閱32772
docker ps
輸出。一旦在安全組中允許端口32772
,您就必須能夠在http://ec2-ip:32772
上訪問您的應用程序。
為了使其能夠在主機端口8080上運行,您需要在docker run期間綁定/暴露主機端口-
$ docker run -p 8080:8080 ......
如果您使用的是ECS,則理想情況下,應在服務中使用ALB和TG。
但是,如果您沒有使用ALB等,則可以嘗試在TD "hostPort": 8080
提供一個靜態hostPort(我沒有嘗試過)。 如果運行良好,則需要確保將部署策略更改為“最低健康百分比= 0”,否則可能會遇到端口沖突問題。
確保apache正在監聽docker容器內的所有IP地址,而不僅僅是本地主機。 IP應該像0.0.0.0。
如果任何服務正在docker內部運行並且僅偵聽localhost,則只能在該容器內部訪問該服務,而不能從主機訪問該服務。
您也可以嘗試使用端口8080啟動apache並將docker 8080端口與主機8080端口綁定
docker run apache -p 8080:8080
如果應用程序需要網絡端口,則必須在docker文件中將其暴露 。
EXPOSE <port> [<port>/<protocol>...]
如果需要將該端口映射到網絡上的特定端口,則必須在啟動新容器時定義該端口。
docker run -p 8080:8080/tcp my_app
如果使用分別運行每個映像,則必須每次都綁定端口。 如果您不想每次都執行此操作,則可以使用docker-compose並在其中添加ports指令。
ports:
- "8080:8080/tcp"
假設您在dockerfile中添加了暴露,則完整的docker-compose.yml如下所示:
version: '1'
services:
web:
build:
ports:
- "8080:8080"
my_app:
image: my_app
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.