【问题标题】:How to define IP Address in DockerFile for H2 Database如何在 DockerFile 中为 H2 数据库定义 IP 地址
【发布时间】:2026-02-20 17:20:07
【问题描述】:

当我运行 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}

【问题讨论】:

    标签: docker h2 dockerfile


    【解决方案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

    【讨论】: