我刚刚开始使用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
答案 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