Ошибка Podman при создании контейнера: [Операция POST не удалась]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка Podman при создании контейнера: [Операция POST не удалась]

Сообщение Anonymous »

У меня есть контейнер podman, в котором есть файл Python для запуска сценария, создающего контейнер с определенным именем_изображения и именем_контейнера.
Восстановите проблему, следуя инструкциям ниже: р>
mkdir trial
cd trial

touch Dockerfile
touch create_container.py

Содержимое файла Python:
from podman import PodmanClient
import sys

def create_container(image_name, container_name):
with PodmanClient() as client:
try:
# Create and start the container
container = client.containers.create(image=image_name, name=container_name)
container.start()
print(f"Container '{container_name}' created and started successfully.")
print(f"Container ID: {container.id}")
except Exception as e:
print(f"Error creating container: {e}")
sys.exit(1)

if __name__ == "__main__":
if len(sys.argv) != 3:
sys.exit(1)

image_name = sys.argv[1]
container_name = sys.argv[2]
create_container(image_name, container_name)

DocekrFile:
FROM python:3.8.5-slim-buster
WORKDIR /app

# Copy the Python script into the container
COPY create_container.py .

# Install the Podman library
RUN pip install podman

# Set the entrypoint to run the Python script
ENTRYPOINT ["python", "create_container.py"]

Выполнить:
podman build -t test
podman run --rm --privileged --network host -v /run/podman/podman.sock:/run/podman/podman.sock test trial

Получение ошибки:
Error creating container: http://%2Ftmp%2Fpodmanpy-runtime-dir-fallback-root%2Fpodman%2Fpodman.sock/v5.2.0/libpod/containers/create (POST operation failed)

Мой подход к решению проблемы:
1) Подумал, что Podmanclient использует случайное местоположение сокета, поэтому жестко запрограммировал это местоположение при использовании Podmanclient в файле Python. >
...
with PodmanClient(uri='unix:///run/podman/podman.sock') as client:
.
.
.
  • изначально возникла проблема с правами доступа к файлу в /run/podman/podman.sock, поэтому были изменены права собственности и права доступа к файлам для обычных пользователей.< /li>
3)Служба Podman через некоторое время перестанет быть активной, поэтому файл /usr/lib/systemd/system/podman.service будет изменен на указанный ниже код. :
[Unit]
Description=Podman API Service
Requires=podman.socket
After=podman.socket
Documentation=man:podman-system-service(1)
StartLimitIntervalSec=0

[Service]
Type=exec
KillMode=process
Environment=LOGGING="--log-level=info"
ExecStart=/usr/bin/podman $LOGGING system service tcp:0.0.0.0:8080 --time=0

[Install]
WantedBy=default.target

пробовал изменить URL-адрес TCP на 127.0.0.1(loclhost), но безуспешно.
  • < li>в крайнем случае я также удалил и переустановил podman.
    Примечание. Я могу создать контейнер снаружи, используя скрипт Python с Podmanclient, поэтому я думаю, что это проблема с podman, а не с podman python. package.
Спасибо.
Код, который выполняется вне контейнера. Проблема не изменится, даже если я добавлю дополнительный os.environ в файл create_container.py.
import os
import podman
# Set the Podman socket (adjust if necessary)
os.environ['PODMAN_SOCKET'] = '/run/user/1000/podman/podman.sock'

def create_container(image_name, container_name, command):
try:
print(f'Starting Container: {image_name}')
print("Command running: " + command)

client = podman.PodmanClient() # Initialize Podman client

# Use bind mount instead of named volume
volume_src = '/home/vinee/myprojects/trial' # Host directory
volume_dst = '/edge/' # Container mount point

# Ensure the source path exists
if not os.path.exists(volume_src):
raise ValueError(f"Source volume path does not exist: {volume_src}")

# Create the mount configuration
bind_volumes = [
{
'type': 'bind',
'source': volume_src,
'target': volume_dst,
'read_only': False # Set to True if you want read-only access
}
]

# Create and start the container
container = client.containers.run(
image=image_name,
name=container_name,
command=command,
detach=True,
mounts=bind_volumes, # Use the mounts configuration
auto_remove=False,
network_mode="host",
shm_size=2147483648,
privileged=True,
devices=['/dev/nvidia0'], # Specify device paths as needed
environment={'TZ': 'Asia/Kolkata'}
)

print(f"Container ID: {container.id}")
container_data = {
'containername': container_name,
'containerid': container.id,
'imagename': image_name,
'status': "RUNNING"
}
print("Container Information:")
print(container_data)

print("-" * 10 + " Container information updated successfully " + "-" * 10)
print("Container Started Successfully")
return {'message': 'Success'}

except podman.errors.PodmanError as e:
print(f"Podman specific error: {e}")
except Exception as e:
print(f"General error creating container: {e}")
return {'message': 'Error creating container'}

if __name__ == "__main__":
result = create_container(
"pythontest",
"aA993dc42c504f4e853261105a2351bd",
"python3 test.py"
)
print(result)


Подробнее здесь: https://stackoverflow.com/questions/790 ... ion-failed
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»