Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Docker是否使用单个Dockerfile运行多个映像?_Mysql_Docker_Dockerfile_Tomcat8 - Fatal编程技术网

Mysql Docker是否使用单个Dockerfile运行多个映像?

Mysql Docker是否使用单个Dockerfile运行多个映像?,mysql,docker,dockerfile,tomcat8,Mysql,Docker,Dockerfile,Tomcat8,我正在尝试在我的环境中测试和使用docker。这是我的文件 当我访问tomcat(http://localhost:8080),我发现这个问题无法访问此站点 注意=>对于窗口,我使用http://192.168.99.100:8080/ 建造 跑 Dockerfile #Prat-1 tomcat FROM tomcat:8.5.35 COPY ./target/spring-rest.war /usr/local/tomcat/webapps/ EXPOSE 8080 #Prat-1 tom

我正在尝试在我的环境中测试和使用docker。这是我的文件 当我访问tomcat(
http://localhost:8080
),我发现这个问题
无法访问此站点

注意=>对于窗口,我使用
http://192.168.99.100:8080/

建造

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-1tomcat
而不设置
mysql
,我就可以访问
http://192.168.99.100:8080/
或我的应用程序
http://192.168.99.100:8080/spring-其余部分
我的档案有什么遗漏吗

谷歌=>我检查了这个参考资料。因为docker已经有多个映像,为什么要使用
apt get
进行安装? 我可以在单个
Dockerfile
中使用多个
FROM
吗?关键问题是:“我可以在单个Dockerfile中使用多个
FROM
…吗?”

如果您这样做,您将使用名为的新docker功能。此功能允许您分多个阶段构建图像,其中每个
FROM
从一个新的基础层开始,放弃您以前所做的一切

这不是您想要做的,因为当您从mysql:5.5中执行
时,您会从该行上方松开整个tomcat部分

您可以构建一个包含tomcat和mysql的docker映像(只使用
中的一条指令),但我建议不要这样做。


因此,实际上最好的解决方案是创建两个Docker映像(2个Docker文件),一个用于tomcat,一个用于mysql,然后使用Docker compose将这两个映像作为组合运行。

如果您有多个容器,则应使用Docker compose。也许他们使用apt get是因为他们将其安装到当前的映像机中?灵感:一般语法包括在Dockerfile中添加额外的时间-无论最后一个FROM语句是哪个,都是最终的基本映像。要从中间映像复制工件和输出,请使用copy--from=。除此之外(对于OP):还要注意,tomcat mysql映像作为映像是不好的做法,因为它还违反了@fab@fab,一个xxx代表一个Dockerfile?是否可以使用单个shell或其他方式同时运行所有这些脚本?现在我将检查您的参考
多级构建
是的,同时运行所有这些工具的工具是。在shell中,您只需键入
docker compose up
,并且需要在当前目录中提供一个docker-compose.yaml文件,该文件引用您的tomcat和mysql映像。
docker run -p 8080:8080 -p 3306:3306 docker-spring-rest   
#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/