Отправка эхо-ввода на стандартный ввод в контейнер докера с помощью докера

Ниже мой пример программы c

    #include <stdio.h>
    int main()
    {
      int x, y, z;
      scanf("%d%d", &x, &y);
      printf("%d,%d" ,x,y);
      z = x + y;
      printf("%d", z);
      return 0;
    }

Я могу скомпилировать программу и создать образ (docker build -t sample_c .). Теперь при запуске контейнера я хотел передать входные параметры в качестве эха в контейнер. Как я могу добиться этого с помощью докера Python

echo "1 2" | ./c_executable ( passing input values to executable file)

В оболочке python я пытаюсь запустить контейнер и передать параметры, как показано. Получение результатов, но значения x и y принимаются как случайные числа.

>>> import docker
>>> client = docker.from_env()
>>> client.containers.run(image='sample_c',command='echo "1 2" | ',entrypoint='/opt/c_build_dir/c_executable')
b'21911,14414231201441445031'
>>> client.containers.run(image='sample_c',command='echo "1 2" | /opt/c_build_dir/c_executable')
b'1 2 | /opt/c_build_dir/c_executable\n'

Как я могу добиться этого с помощью докера python??

1 ответ

Если ваш основной процесс контейнера использует какие-либо функции оболочки (каналы, перенаправление, расширение переменных среды), вам необходимо вручную включить оболочку самостоятельно. Оболочка Борнаsh -c option запустит одну встроенную команду.

client.containers.run(
  image='sample_c',
  command=['sh', '-c', 'echo "1 2" | /opt/c_build_dir/c_executable']
)

В commandoption может быть строкой или списком; если вы используете список (рекомендуется), вам нужно вручную разбить команду на отдельные слова, но после этого вам больше не нужно избегать вещей.

Другие вопросы по тегам