我在一个容器中有一个postgres数据库,在另一个容器中有一个Java应用程序。可从localhost的端口1310访问Postgres数据库,但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或命令中进行哪些更改,以使biggdb(postgres)容器的java容器访问端口吗?
答案 0 :(得分: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
选项是您的代码,而不是来自框架,那么通过环境变量传递这样的设置可能比命令行参数更容易管理。
答案 1 :(得分:0)
当您使用map(seq_along(dfs), ~cbind(dfs[[.]], new_colum = new_value[.]))
来启动两个容器时,它们已经共享了一个公共网络。为了能够访问,应该使用docker-compose
而不是docker-compose run
。此外,在docker run
命令中传递服务名称(java
)而不是容器名称(modelpolisher_java
)。
因此,只需使用以下命令来运行jar:
docker-compose run