Я следую этому руководству на YouTube.
Как показано на видео (временная метка 1:29:09), когда человек запускает docker Compose, это работает.
Однако, когда я запускаю ту же команду в своем терминале, я получаю сообщение об ошибке:
elt_script-1 exited with code 1
В моем скрипте Python возникает следующая ошибка:
Traceback (most recent call last):
elt_script-1 | File "elt_script.py", line 54, in \
elt_script-1 | subprocess.run(dump_command, env=subprocess_env, check=True)
elt_script-1 | File "/usr/local/lib/python3.8/subprocess.py", line 516, in run
elt_script-1 | raise CalledProcessError(retcode, process.args,
elt_script-1 | subprocess.CalledProcessError: Command '\['pg_dump', '-h', 'source_postgres', '-U', 'postgres', '-d', 'source_db', '-f', 'data_dump.sql', '-w'\]' returned non-zero exit status 1
Проблема возникает при запуске команды в моем скрипте Python (elt_script.py). Вот скрипт:
import subprocess
import time
def wait_for_postgres(host, max_retries=5, delay_seconds=5):
retries = 0
while retries < max_retries:
try:
result = subprocess.run(
["pg_isready", "-h", host], check=True, capture_output=True, text=True)
if "accepting connections" in result.stdout:
print("Successfully connected to Postgres")
return True
except subprocess.CalledProcessError as e:
print(f"Error connecting to Postgres: {e}")
retries += 1
print(
f"Retrying in {delay_seconds} seconds... (Attempt {retries}/{max_retries})")
time.sleep(delay_seconds)
print("Max retries reached. Exiting.")
return False
if not wait_for_postgres(host="source_postgres"):
exit(1)
print("Starting ELT script...")
source_config = {
'dbname': 'source_db',
'user': 'postgres',
'password': 'secret',
'host': 'source_postgres'
}
destination_config = {
'dbname': 'destination_db',
'user': 'postgres',
'password': 'secret',
'host': 'destination_postgres'
}
dump_command = [
'pg_dump',
'-h', source_config['host'],
'-U', source_config['user'],
'-d', source_config['dbname'],
'-f', 'data_dump.sql',
'-w'
]
subprocess_env = dict(PGPASSWORD=source_config['password'])
subprocess.run(dump_command, env=subprocess_env, check=True)
load_command = [
'psql',
'-h', destination_config['host'],
'-U', destination_config['user'],
'-d', destination_config['dbname'],
'-a', '-f', 'data_dump.sql',
]
subprocess_env = dict(PGPASSWORD=destination_config['password'])
subprocess.run(load_command, env=subprocess_env, check=True)
print("Ending ELT Script...")
Вот также мой Dockerfile, если это поможет:
FROM python:3.8-slim
RUN apt-get update && apt-get install -y postgresql-client
COPY elt_script.py .
CMD [ "python", "elt_script.py" ]
а вот мой файл Docker Compose:
version: '3'
services:
source_postgres:
image: postgres:18
ports:
- "5433:5432"
networks:
- elt_network
environment:
POSTGRES_DB: source_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
volumes:
- ./source_db_init/init.sql:/docker-entrypoint-initdb.d/init.sql
destination_postgres:
image: postgres:18
ports:
- "5434:5432"
networks:
- elt_network
environment:
POSTGRES_DB: destination_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
volumes:
- ./source_db_init/init.sql:/docker-entrypoint-initdb.d/init.sql
elt_script:
build:
context: ./elt
dockerfile: Dockerfile
command: ["python", "elt_script.py"]
networks:
- elt_network
depends_on:
- source_postgres
- destination_postgres
networks:
elt_network:
driver: bridge
Подробнее здесь: https://stackoverflow.com/questions/798 ... windows-11
Ошибка при запуске команды Docker Compose up в терминале (Powershell, Windows 11) ⇐ Python
Программы на Python
1768617032
Anonymous
Я следую этому руководству на YouTube.
Как показано на видео (временная метка 1:29:09), когда человек запускает docker Compose, это работает.
Однако, когда я запускаю ту же команду в своем терминале, я получаю сообщение об ошибке:
elt_script-1 exited with code 1
В моем скрипте Python возникает следующая ошибка:
Traceback (most recent call last):
elt_script-1 | File "elt_script.py", line 54, in \
elt_script-1 | subprocess.run(dump_command, env=subprocess_env, check=True)
elt_script-1 | File "/usr/local/lib/python3.8/subprocess.py", line 516, in run
elt_script-1 | raise CalledProcessError(retcode, process.args,
elt_script-1 | subprocess.CalledProcessError: Command '\['pg_dump', '-h', 'source_postgres', '-U', 'postgres', '-d', 'source_db', '-f', 'data_dump.sql', '-w'\]' returned non-zero exit status 1
Проблема возникает при запуске команды в моем скрипте Python (elt_script.py). Вот скрипт:
import subprocess
import time
def wait_for_postgres(host, max_retries=5, delay_seconds=5):
retries = 0
while retries < max_retries:
try:
result = subprocess.run(
["pg_isready", "-h", host], check=True, capture_output=True, text=True)
if "accepting connections" in result.stdout:
print("Successfully connected to Postgres")
return True
except subprocess.CalledProcessError as e:
print(f"Error connecting to Postgres: {e}")
retries += 1
print(
f"Retrying in {delay_seconds} seconds... (Attempt {retries}/{max_retries})")
time.sleep(delay_seconds)
print("Max retries reached. Exiting.")
return False
if not wait_for_postgres(host="source_postgres"):
exit(1)
print("Starting ELT script...")
source_config = {
'dbname': 'source_db',
'user': 'postgres',
'password': 'secret',
'host': 'source_postgres'
}
destination_config = {
'dbname': 'destination_db',
'user': 'postgres',
'password': 'secret',
'host': 'destination_postgres'
}
dump_command = [
'pg_dump',
'-h', source_config['host'],
'-U', source_config['user'],
'-d', source_config['dbname'],
'-f', 'data_dump.sql',
'-w'
]
subprocess_env = dict(PGPASSWORD=source_config['password'])
subprocess.run(dump_command, env=subprocess_env, check=True)
load_command = [
'psql',
'-h', destination_config['host'],
'-U', destination_config['user'],
'-d', destination_config['dbname'],
'-a', '-f', 'data_dump.sql',
]
subprocess_env = dict(PGPASSWORD=destination_config['password'])
subprocess.run(load_command, env=subprocess_env, check=True)
print("Ending ELT Script...")
Вот также мой Dockerfile, если это поможет:
FROM python:3.8-slim
RUN apt-get update && apt-get install -y postgresql-client
COPY elt_script.py .
CMD [ "python", "elt_script.py" ]
а вот мой файл Docker Compose:
version: '3'
services:
source_postgres:
image: postgres:18
ports:
- "5433:5432"
networks:
- elt_network
environment:
POSTGRES_DB: source_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
volumes:
- ./source_db_init/init.sql:/docker-entrypoint-initdb.d/init.sql
destination_postgres:
image: postgres:18
ports:
- "5434:5432"
networks:
- elt_network
environment:
POSTGRES_DB: destination_db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
volumes:
- ./source_db_init/init.sql:/docker-entrypoint-initdb.d/init.sql
elt_script:
build:
context: ./elt
dockerfile: Dockerfile
command: ["python", "elt_script.py"]
networks:
- elt_network
depends_on:
- source_postgres
- destination_postgres
networks:
elt_network:
driver: bridge
Подробнее здесь: [url]https://stackoverflow.com/questions/79838816/error-when-running-docker-compose-up-command-in-terminal-powershell-windows-11[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия