如何在 DockerFile 中为 H2 数据库定义 IP 地址

Posted

技术标签:

【中文标题】如何在 DockerFile 中为 H2 数据库定义 IP 地址【英文标题】:How to define IP Address in DockerFile for H2 Database 【发布时间】:2017-01-03 14:16:49 【问题描述】:

当我运行 docker 文件来运行 H2 数据库时,它会自动分配 IP 地址。

如何通过环境设置IP地址,所以docker只允许TCP连接和HTTP连接两个IP地址。

FROM klousiaj/oracle-java:7.79
MAINTAINER J.P. Klousia <klousiaj>

ENV DOWNLOAD http://www.h2database.com/h2-2016-10-31.zip
ENV DATA_DIR /opt/h2-data

RUN curl $DOWNLOAD -o h2.zip \
    && unzip h2.zip -d /opt/ \
    && rm h2.zip \
    && mkdir -p $DATA_DIR

EXPOSE 8082 9092

CMD java -cp /opt/h2/bin/h2*.jar org.h2.tools.Server \
    -web -webAllowOthers -webPort 8082 \
    -tcp -tcpAllowOthers -tcpPort 9092 \
    -baseDir $DATA_DIR

VOLUME $DATA_DIR

【问题讨论】:

【参考方案1】:

尽可能不要在 docker 范例中使用任何静态 ip。

如果您不想让服务与其他服务通信,请使用您在 docker-compose 文件中定义的服务名称,比如“db”

version: "2"
services:
  db:
    image: klousiaj/oracle-java:7.79
  app:
    image: busybox

所以从应用程序中,您可以使用telnet db $dbport 连接到数据库,例如就mysql而言,你用telnet db 3306

当然,db也可以使用telnet app连接到app上的anyu端口。

您永远不想自己处理 IP 或网络,除非您真的必须这样做(非常罕见的情况)。

如果你想从主机访问 app-web 端口,你将把那个暴露给主机

version: "2"
services:
  db:
    image: klousiaj/oracle-java:7.79
  app:
    image: nginx
    port:
      - 80:80

也就是说,你现在可以使用你的主机ip访问app的nginx的80端口,“wget http://:80

【讨论】:

以上是关于如何在 DockerFile 中为 H2 数据库定义 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

在 Servlet 和 JDBC 中为 JUnit 分离 H2 数据库 [关闭]

如何在 H2 中为该表获取正确的二维数组?

如何在 build.gradle 中指定“pig-0.13.0-h2.jar”依赖?

如何在 SceneKit 的场景视图中为阴影正确添加定向光?

无法在 Glassfish 中为 h2 数据库创建连接池和数据源

在 H2 数据库引擎中为 UUID 类型的主键列指定默认值?