Docker + Postgres无法进行配置

时间:2019-04-02 23:42:54

标签: postgresql docker docker-compose

我刚刚开始使用docker,但无法获取连接到数据库的API。我得到一个connection refused

我在日志中得到了它,这似乎意味着没有传入环境变量:The files belonging to this database system will be owned by user "postgres".

docker exec -ti [container_id] psql -U postgres也可以,但是docker exec -ti [container_id] psql -U docker-> role "docker" does not exist

我还尝试了COPY在数据库Dockerfile中的init.sql文件,但似乎没有任何作用。

这是我的docker-compose.yaml。有什么不对劲的地方吗?

version: '2'
services:
  db:
    build: ./db
    volumes:
      - ./db/pgdata:/pgdata
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=docker
      - POSTGRES_PASSWORD=docker
      - POSTGRES_DB=xx
      - PGDATA=/pgdata

  api:
    build:
      context: .
      args:
        app_env: ${APP_ENV}
    volumes:
      - .:/go/src/github.com/x/xx
    ports:
      - "5000:8080"
    links:
      - db

这是我的Dockerfile

FROM golang
ARG app_env
ENV APP_ENV $app_env

# Copy the local package files to the container's workspace
COPY . /go/src/github.com/x/xx
WORKDIR /go/src/github.com/x/xx

# added vendor services will need to be included here
RUN go build

# if dev setting will use pilu/fresh for code reloading via docker-compose volume sharing with local machine
# if production setting will build binary
CMD if [ ${APP_ENV} = production ]; \
    then \
    api; \
    else \
    go get github.com/pilu/fresh && \
    fresh -c recompile.conf; \
    fi

# Document that the container uses port 8080
EXPOSE 8080

这是我在./db下的Dockerfile

FROM postgres:latest
EXPOSE 5432

2 个答案:

答案 0 :(得分:0)

如果您正在运行Windows,则无法使用。 参见此issue

或者,您可以使用这样的命名卷:

postgresql:
  image: ./db
  volumes:
  - postgres:/var/lib/postgresql/data
volumes:
  postgres:

答案 1 :(得分:0)

从我所看到的看来,这似乎是网络问题。没有完整范围的情况下很难调试文件,因此这里是doc about the internal networks以及如何允许容器之间的连接。

此外,这是一个完整的docker-compose.yml,具有Postgres数据库和桥接网络:

version: '3.1'

services:

  postgres:
    container_name: postgres
    image: postgres:11-alpine
    network_mode: bridge
    volumes:
      - ./data:/var/lib/postgresql/data
    ports:
      - 5432:5432
    environment:
      - "POSTGRES_PASSWORD=whatever"

  clientApp:
    container_name: cinema
    image: your/image:latest
    network_mode: bridge
    external_links:
      - postgres