我希望使用docker扩展Web应用程序(我是Docker的初学者)。我的应用程序需要PostgreSQL。因此,我决定使用docker-compose。
docker-compose.yaml
看起来像:
version: '3.8'
services:
db:
image: postgres
command: "postgres -c listen_addresses='*'"
environment:
- POSTGRES_DB=CatsQMS
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=12345qwerty
application:
build: .
ports:
- "8080:8080"
depends_on:
- db
而且我还有配置我的Web应用程序的文件config.yaml
,它看起来像这样:
database_config:
host: db
user: postgres
password: 12345qwerty
port: 5432
database: CatsQMS
# Unimportant stuff
[当我在docker-compose中午餐时,使用docker-compose up
,此时构建已冻结:
Recreating cats_queue_management_system_db_1 ... done
Recreating cats_queue_management_system_application_1 ... done
Attaching to cats_queue_management_system_db_1, cats_queue_management_system_application_1
db_1 |
db_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1 |
db_1 | 2020-05-20 13:42:51.628 UTC [1] LOG: starting PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1 | 2020-05-20 13:42:51.628 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db_1 | 2020-05-20 13:42:51.628 UTC [1] LOG: listening on IPv6 address "::", port 5432
db_1 | 2020-05-20 13:42:51.635 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2020-05-20 13:42:51.660 UTC [24] LOG: database system was shut down at 2020-05-20 13:39:45 UTC
db_1 | 2020-05-20 13:42:51.673 UTC [1] LOG: database system is ready to accept connections
也许这很重要,我的Dockerfile:
FROM python:3.8
RUN mkdir /docker-entrypoint-initdb.d/
COPY ./application/sources/database/init.sql /docker-entrypoint-initdb.d/
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
RUN python3 setup.py develop
ENTRYPOINT ["start_app", "-d"]
我在哪里承认错误?
您的应用程序和PostgreSQL数据库正在运行,应该可以正常工作。但是Docker在将容器运行到db
容器之后附加了。
您可以通过使用选项-d
or --detach
on docker-compose up
来避免这种情况:
-d
命令汇总每个容器的输出(本质上是在运行--detach
)。当命令退出时,所有容器都将停止。运行docker-compose up
将在后台启动容器并使它们继续运行。所以您的命令如下所示:
docker-compose up
我不认为问题出在数据库容器上。看起来它正常启动,正在监听连接。
您的Web应用无法与数据库对话吗?如果是这样,则可能是a)他们不共享网络,并且b)您试图在端口5432上进行连接,但是postgres db容器未公开或发布此端口。