如果有一个postgres的docker-compose文件可以正常工作,我可以从R中访问它。请参见下面的相关内容。但是,我还需要一个等效的“ docker run”命令,但由于某种原因无法使它正常工作。据我所知,命令/设置是等效的。有什么建议吗?
postgres:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
PGDATA: /var/lib/postgresql/data
ports:
- 5432:5432
restart: always
volumes:
- ~/postgresql/data:/var/lib/postgresql/data
我正在使用的docker run命令是:
docker run -p 5432:5432 \
--name postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e PGDATA=/var/lib/postgresql/data \
-v ~/postgresql/data:/var/lib/postgresql/data \
-d postgres
编辑1:在两种设置下,我都试图从另一个Docker容器/服务进行连接。在docker-compose设置中,一个相同的yml文件中描述了不同的服务
编辑2:David的回答提供了我需要的所有信息。创建一个docker网络并在每个docker run
调用中引用该网络。对于那些对使用此设置将Postgres,pgadmin4和数据科学容器与R和Python连接的shell脚本感兴趣的人,请参见以下链接:
https://github.com/radiant-rstats/docker/blob/master/launch-rsm-msba-pg.sh
答案 0 :(得分:1)
Docker Compose将为您automatically create a Docker network(每个Compose文件)。为了使容器间DNS正常工作,you can't use the default Docker network但任何命名的网络都可以工作。因此,您需要添加一些设置:
docker network create some-name # default options are fine
docker run --net some-name --name postgres ...
# will be accessible as "postgres" from other containers on
# the "some-name" network