从另一个容器访问一个容器的访问端口

14 浏览
0 Comments

从另一个容器访问一个容器的访问端口

我有一个postgres数据库在一个容器中,另一个容器中有一个java应用程序。Postgres数据库可以通过本地主机的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)容器的端口吗?

0
0 Comments

问题的原因是,两个容器需要在相同的Docker内部网络上才能相互通信。Docker Compose会自动为您创建一个网络,并将容器连接到该网络。如果您使用docker run命令在旁边运行一个容器,则需要找到该网络的名称。

解决方法是,首先运行docker network ls命令,以列出您拥有的Docker内部网络。其中一个网络的名称将类似于bigg_default,其中第一部分(可能)是您当前的目录名称。然后,当您实际运行容器时,可以使用docker run --net bigg_default ...命令连接到该网络。

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

0
0 Comments

问题的原因是使用了错误的命令和容器名称。解决方法是使用正确的命令和服务名称。

在使用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

0