Отправка эхо-ввода на стандартный ввод в контейнер докера с помощью докера
Ниже мой пример программы 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']
)
В command
option может быть строкой или списком; если вы используете список (рекомендуется), вам нужно вручную разбить команду на отдельные слова, но после этого вам больше не нужно избегать вещей.