在使用docker

时间:2018-04-03 12:42:14

标签: python postgresql docker docker-compose

我正在尝试准备一个支持2个容器的docker-compose文件。它们是高山图像中的postgres和python应用程序。在阅读之前只需考虑ı需要在高山内部使用python。

我的Dockerfile是:

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./app.py" ]

我的app.py文件:

import psycopg2
from config import config

def connect():
    """ Connect to the PostgreSQL database server """
    conn = None
    try:
        # read connection parameters
        params = config()

        # connect to the PostgreSQL server
        print('Connecting to the PostgreSQL database...')
        conn = psycopg2.connect(**params)

        # create a cursor
        cur = conn.cursor()

 # execute a statement
        print('PostgreSQL database version:')
        cur.execute ("SELECT * FROM my_table;")

        # display the PostgreSQL database server version
        db_version = cur.fetchone()
        print(db_version)

     # close the communication with the PostgreSQL
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()
            print('Database connection closed.')


if __name__ == '__main__':
    connect()

我使用该命令启动了python容器:

  

docker run -it my_image app.py

我单独启动了2个容器(postgres和python)并使其工作。但是我的容器只能运行一次,它的工作是在postgresql数据库中创建一个select作业。

这是第一部分。我的主要目标如下。

为了简单起见,我准备了一个docker-compose.yml文件:

version: '3'

services:

  python:
    image: python
    build:
        context: .
        dockerfile: Dockerfile

  postgres:
    image: postgres:${TAG:-latest}
    build:
      context: .
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - "5435:5432"
    networks:
      - postgres

networks:
  postgres:

我的dockerfile是here

当我键入docker-compose时,我的postgres启动但是python以代码0退出。

  

my_file_python_1退出,代码为0

对于使用docker-compose的python应用程序,我应该为独立容器做些什么?它总是只工作一次。

我可以不断努力
  

docker run -d -it my_image app.py

但我的目标是用docker-compose制作它。

1 个答案:

答案 0 :(得分:0)

version: '3'

services:

  python:
    image: python
    build:
        context: .
        dockerfile: Dockerfile

  postgres:
    image: postgres:${TAG:-latest}
    build:
      context: .
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - "5435:5432"
    networks:
      - postgres

networks:
  postgres:
     tty: true

如果退出代码为0表示在所有执行后退出容器,则意味着您必须在前台运行该进程以保持容器运行。如果退出代码不是0,则意味着它因代码问题而退出。所以尝试运行任何前台进程。

您是否可以检查docker-compose.yml文件中的tty选项(请参阅参考资料)是否继续运行?