我是新手,我想对接一个现有的应用程序。
它包括一个react应用程序(我已经成功地为该应用程序创建了一个容器)、一个基于节点表达式的REST-api (这是一种可行的)和一个mysql-数据库(到目前为止还不起作用)。
在开发过程中,我将代理放入了的package.json文件中。这使我能够将所有api请求转发到不同的端口。我也想在我的码头集装箱里有这个特性。例如,我在端口3000上的响应应用程序通过代理将所有未知请求转发到端口5000上的rest。3000港和5000港在不同的集装箱中。
此外,我需要剩下的容器可以访问另一个mysql容器的端口3306。不过,还需要创建另一个mysql容器。它应该使用hypriot/rpi-mysql或类似的东西,在dockerfile中,它应该将给定的.sql文件导入数据库,然后在后台运行。
因此,我的问题是:在集装箱之间共享港口的最佳方式是什么?如何为以MySql文件为安装程序的.sql容器设置Dockerfile?
发布于 2020-02-12 12:47:56
在集装箱之间共享港口的最佳方式是什么?
您并不是真正地在集装箱之间“共享”端口。相反,您希望创建网络并将每个容器附加到该网络。每个容器都有一个network别名(本质上是一个主机名),您可以使用它来访问服务。
$ docker network create foo
$ docker run --network=foo --network-alias=mysql -p 3306:3306 my-mysql:latest
$ docker run --network=foo --network-alias=restapi -p 5000:5000 --link mysql my-restapi:latest
$ docker run --network=foo --network-alias=react -p 3000:3000 --link restapi my-reactapp:latest因此myrestapi容器可以使用主机名mysql和端口3306访问mysql容器,并且您的响应应用程序可以使用主机名restapi访问myrestapi容器。容器也可以从您的本地主机访问,这样您就可以使用浏览器访问您的react应用程序,而无需额外设置。
在docker-compose.yml (我不使用吨,这样某人可能有更好的解决方案)中,它看起来如下所示:
networks:
foo:
services:
mariadb:
container_name: mysql # this works for your alias so long as you don't have another container called mysql
image: mariadb:latest
networks: ["foo"]
ports:
- 3306:3306其他部门也会效仿。
至于“启动”数据库,这有点棘手。如果DB必须运行,则需要替换docker容器的入口点来启动服务器,运行mysql命令导入数据,然后脚本就会永远旋转。
或者,您可以编写容器启动脚本,并在其启动后,以这种方式导入数据。
https://devops.stackexchange.com/questions/10781
复制相似问题