首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让码头集装箱互相配合

让码头集装箱互相配合
EN

DevOps用户
提问于 2020-02-12 10:21:47
回答 1查看 83关注 0票数 0

我是新手,我想对接一个现有的应用程序。

它包括一个react应用程序(我已经成功地为该应用程序创建了一个容器)、一个基于节点表达式的REST-api (这是一种可行的)和一个mysql-数据库(到目前为止还不起作用)。

在开发过程中,我将代理放入了的package.json文件中。这使我能够将所有api请求转发到不同的端口。我也想在我的码头集装箱里有这个特性。例如,我在端口3000上的响应应用程序通过代理将所有未知请求转发到端口5000上的rest。3000港和5000港在不同的集装箱中。

此外,我需要剩下的容器可以访问另一个mysql容器的端口3306。不过,还需要创建另一个mysql容器。它应该使用hypriot/rpi-mysql或类似的东西,在dockerfile中,它应该将给定的.sql文件导入数据库,然后在后台运行。

因此,我的问题是:在集装箱之间共享港口的最佳方式是什么?如何为以MySql文件为安装程序的.sql容器设置Dockerfile?

EN

回答 1

DevOps用户

发布于 2020-02-12 12:47:56

在集装箱之间共享港口的最佳方式是什么?

您并不是真正地在集装箱之间“共享”端口。相反,您希望创建网络并将每个容器附加到该网络。每个容器都有一个network别名(本质上是一个主机名),您可以使用它来访问服务。

代码语言:javascript
复制
$ 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 (我不使用吨,这样某人可能有更好的解决方案)中,它看起来如下所示:

代码语言:javascript
复制
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命令导入数据,然后脚本就会永远旋转。

或者,您可以编写容器启动脚本,并在其启动后,以这种方式导入数据。

票数 2
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/10781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档