我正在尝试为我的环境测试和使用docker。这是我的Dockerfile当我访问tomcat(http://localhost:8080
(时,我得到了问题This site can’t be reached
。
注意=>对于窗口,我使用http://192.168.99.100:8080/
。
构建
docker build -f Dockerfile -t docker-spring-rest .
运行
docker run -p 8080:8080 -p 3306:3306 docker-spring-rest
Dockerfile
#Prat-1 tomcat
FROM tomcat:8.5.35
COPY ./target/spring-rest.war /usr/local/tomcat/webapps/
EXPOSE 8080
#Prat-1 tomcat
FROM mysql:5.5
ENV MYSQL_ROOT_PASSWORD root
ENV MYSQL_DATABASE spring-rest
COPY ./DB.SQL /docker-entrypoint-initdb.d/
一件奇怪的事情是,如果我只设置Part-1 tomcat
而不设置mysql
,我可以访问http://192.168.99.100:8080/
或我的应用程序http://192.168.99.100:8080/spring-rest
我的档案里少了什么吗?
谷歌=>我检查了这个tomcat mysql引用。为什么他们使用apt-get
来安装,因为docker已经有多个映像了?我可以像在单个Dockerfile
中使用FROM tomcat, FROM mysql, FROM xxx
一样使用多个FROM
吗?
这里的关键问题是:"我可以在一个Dockerfile中使用多个FROM
吗?"。
如果你这样做,你就使用了一个新的docker功能,称为多级构建。该功能允许您在多个阶段构建图像,其中每个FROM
都从一个新的基层开始,丢弃之前所做的一切。
这不是你想要做的,因为当你做FROM mysql:5.5
时,你会从这条线上松开整个tomcat部分。
您可以构建一个包含tomcat和mysql(只使用一个FROM
(指令的docker映像,但我建议不要这样做。Docker镜像应该只处理一个问题。
因此,实际上最好的解决方案是创建两个Docker映像(2个Dockerfiles(,一个用于tomcat,一个为mysql,然后使用Docker compose将这两个映像作为组合运行。