我正在尝试准备一个支持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制作它。
答案 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选项(请参阅参考资料)是否继续运行?