Отправка ввода эха на стандартный ввод в контейнер docker с использованием docker - PullRequest
0 голосов
/ 03 марта 2020

Ниже приведен мой пример 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 docker

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 docker ??

1 Ответ

1 голос
/ 03 марта 2020

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...