等效的docker run命令,用于工作docker-compose(postgres)

时间:2018-10-17 02:07:06

标签: postgresql docker docker-compose

如果有一个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

1 个答案:

答案 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