【问题标题】:Access port of one container from another container从另一个容器访问一个容器的端口
【发布时间】:2019-07-13 06:19:40
【问题描述】:

我在一个容器中有一个 postgres 数据库,在另一个容器中有一个 java 应用程序。 Postgres 数据库可从 localhost 中的端口 1310 访问,但 java 容器无法访问它。 我试过这个命令:

docker run modelpolisher_java java -jar ModelPolisher-noDB-1.7.jar --host=biggdb --port=5432 --user=postgres --passwd=postgres --dbname=bigg

但它给出了错误java.net.UnknownHostException: biggdb

这是我的docker-compose.yml 文件:

version: '3'
services:
  biggdb:
    container_name: modelpolisher_biggdb
    build: ./docker/bigg_docker
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=bigg
    ports:
      - "1310:5432"
  java:
    container_name: modelpolisher_java
    build: ./docker/java_docker
    stdin_open: true
    tty: true

用于 biggdb 的 Dockerfile:

FROM postgres:11.4

RUN apt update &&\
apt install wget -y &&\
# Create directory '/bigg_database_dump/' and download bigg_database dump as 'database.dump'
wget -P /bigg_database_dump/ https://modelpolisher.s3.ap-south-1.amazonaws.com/bigg_database.dump &&\
rm -rf /var/lib/apt/lists/*

COPY ./scripts/restore_biggdb.sh /docker-entrypoint-initdb.d/restore_biggdb.sh

EXPOSE 1310:5432

谁能告诉我需要在 docker-compose.yml 或命令中做哪些更改,以使 java 容器访问 biggdb (postgres) 容器的端口?

【问题讨论】:

标签: docker docker-compose dockerfile docker-networking docker-link


【解决方案1】:

两个容器必须在同一个 Docker 内部网络上才能相互通信。 Docker Compose automatically creates a network for you 并将容器附加到该网络。如果您是 docker run 旁边的容器,则需要找到该网络的名称。

运行

docker network ls

这将列出您拥有的 Docker 内部网络。其中一个将被命名为bigg_default,其中第一部分(可能)是您当前的目录名称。然后,当您实际运行容器时,您可以使用

附加到该网络
docker run --net bigg_default ...

考虑在docker-compose.yml 文件中设置command: 以在docker-compose up 时传递这些参数。如果--host 选项是您的代码并且不是来自框架,那么通过环境变量传递这样的设置可能比命令行参数更容易管理。

【讨论】:

    【解决方案2】:

    当您使用docker-compose 启动两个容器时,它们已经共享一个公共网络。为了能够访问,您应该使用docker-compose run 而不是docker run。此外,在 docker-compose run 命令中传递服务名称 (java) 而不是容器名称 (modelpolisher_java)。

    所以只需使用以下命令来运行您的 jar:

    docker-compose run java java -jar ModelPolisher-noDB-1.7.jar --host=biggdb --port=5432 --user=postgres --passwd=postgres --dbname=bigg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2019-11-02
      • 1970-01-01
      • 2019-06-13
      相关资源
      最近更新 更多