0

我正在尝试连接到在 docker 容器中运行在 tomcat8 上的 Web 应用程序。我可以从容器内访问它lynx http://localhost:8080/myapp,但是当我尝试从主机访问它时,我只能得到HTTP request sent; waiting for response.

我在 Dockerfile 中公开端口 8080,我sudo docker inspect mycontainer | grep IPAddress用来获取容器的 IP 地址。

我用来运行 docker 容器的命令是这样的:

sudo docker run -ti --name myapp --link mysql1:mysql1 --link rabbitmq1:rabbitmq1 -e "MYSQL_HOST=mysql1" -e "MYSQL_USER=myuser" -e "MYSQL_PASSWORD=mysqlpassword" -e "MYSQL_USERNAME=mysqlusername" -e "MYSQL_ROOT_PASSWORD=rootpassword" -e "RABBITMQ_SERVER_ADDRESS=rabbitmq1" -e "MY_WEB_ENVIRONMENT_ID=qa" -e "MY_WEB_TENANT_ID=tenant1" -p "8080:8080" -d localhost:5000/myapp:latest

我的 Dockerfile:

FROM localhost:5000/web_base:latest
MAINTAINER "Me" <me@my_company.com>

#Install mysql client
RUN yum -y install mysql

#Add Run shell script
ADD run.sh /home/ec2-user/run.sh
RUN chmod +x /home/ec2-user/run.sh

EXPOSE 8080

ENTRYPOINT ["/bin/bash"]
CMD ["/home/ec2-user/run.sh"]

我的 run.sh:

sudo tomcat8 start && sudo tail -f /var/log/tomcat8/catalina.out

任何想法为什么我可以从容器内而不是从主机访问它?

谢谢

4

3 回答 3

0

我现在可以从主机访问 tomcat8 服务器了。问题出在这里:

sudo tomcat8 start && sudo tail -f /var/log/tomcat8/catalina.out

Tomcat8 必须作为服务启动:

sudo service tomcat8 start && sudo tail -f /var/log/tomcat8/catalina.out
于 2014-12-10T17:34:53.173 回答
0

你的 docker run 命令是什么样的?您仍然需要执行 -p 8080:8080。在 dockerfile 中公开仅将其公开给链接容器而不是主机 vm。

于 2014-12-10T16:47:25.910 回答
0

点击给定命令以查找docker-machine 的 IP 地址

$ docker-machine ls

输出将类似于

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.10.3

现在从主机运行您的应用程序:http : //192.168.99.100 :8080/myapp

于 2016-04-01T13:27:50.627 回答