Docker化游戏框架
Dockerizing play framework
我的 docker 撰写文件是:
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 up 时,都不会与 postgres 建立连接。例外是
org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
然而,当我在容器 crm-psql 中执行并键入 psql crm 时,它会进入 postgres shell。这里有什么问题
我认为你的问题是你使用本地主机来指示你的数据库。您应该改用 link。从您的 "sbt" 容器的角度来看,localhost 本身就是您的本地计算机(具有端口转发)或您的 postgresql 容器。
一般我用的是环境变量
links:
- postgres
- nginx
environment:
- POSTGRES_SERVICE_HOST=postgres
在您需要在 SBT 脚本中指定如何使用您的 POSTGRES_SERVICE_HOST 变量之后
我的 docker 撰写文件是:
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 up 时,都不会与 postgres 建立连接。例外是
org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
然而,当我在容器 crm-psql 中执行并键入 psql crm 时,它会进入 postgres shell。这里有什么问题
我认为你的问题是你使用本地主机来指示你的数据库。您应该改用 link。从您的 "sbt" 容器的角度来看,localhost 本身就是您的本地计算机(具有端口转发)或您的 postgresql 容器。
一般我用的是环境变量
links:
- postgres
- nginx
environment:
- POSTGRES_SERVICE_HOST=postgres
在您需要在 SBT 脚本中指定如何使用您的 POSTGRES_SERVICE_HOST 变量之后