我的docker compose文件是:
version: '3'
services:
postgres:
container_name: crm-psql
image: postgres:9.3
restart: always
environment:
- POSTGRES_DB=crm
- POSTGRES_USER=root
- POSTGRES_PASSWORD=root
volumes:
- ./db/postgres/data:/var/lib/postgresql/data
ports:
- 5432:5432
nginx:
container_name: crm-nginx
image: nginx:1.15
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
web:
build: .
ports:
- 9000:9000
volumes:
- .:/src/main/java
- ~/.ivy2:/root/.ivy2
- ~/.sbt:/root/.sbt
links:
- postgres
- nginx
用于构建的docker文件为:
FROM openjdk:8
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
ENV SBT_VERSION 1.2.1
# Install curl
RUN \
apt-get update && \
apt-get -y install curl && \
apt-get -y install vim
# Install sbt
RUN \
curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
dpkg -i sbt-$SBT_VERSION.deb && \
rm sbt-$SBT_VERSION.deb && \
apt-get update && \
apt-get -y install sbt
WORKDIR /src/main/java
COPY . /src/main/java
RUN sbt update
EXPOSE 9000
ENTRYPOINT ["sbt", "run"]
每当我进行docker-compose时,都不会建立与postgres的连接。例外是
org.postgresql.util.PSQLException:与本地主机的连接:5432被拒绝。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接。
但是,当我在容器crm-psql中执行并键入psql crm时,它将进入postgres shell。这是什么问题
答案 0 :(得分:1)
我认为您的问题是您使用localhost指示数据库。您应该改用链接。从“ sbt”容器的角度来看,本地主机本身就是本地主机,而不是本地计算机(具有端口转发功能)或postgresql容器。
通常,我使用的是环境变量。
links:
- postgres
- nginx
environment:
- POSTGRES_SERVICE_HOST=postgres
需要在SBT脚本中指定如何使用POSTGRES_SERVICE_HOST变量后