Bash Heredoc, похоже, не работает с заявлением Docker RUN - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь использовать пакет Valve steamcmd в bash-скрипте, интерактивной оболочке, которая принимает пользовательский ввод. Конечно, я хотел бы иметь возможность отправлять ввод вручную как часть сборки Docker, но у меня возникают некоторые проблемы.

Я начал с установки steamcmd локально и запуска этого сценария:

./steamcmd <<LOGIN
login anonymous
quit
LOGIN

Неудивительно, что он работает правильно, выдавая такой вывод:

Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...OK.

Connecting anonymously to Steam Public...Logged in OK
Waiting for user info...OK
Steam>

Проблемы начинаются, когда я пытаюсь выполнить ту же команду в Docker:

RUN ./steamcmd <<LOGIN \
login anonymous \
quit \
LOGIN

Во время сборки, он запускает ./steamcmd, но затем зависает в приглашении ввода, никакие данные в Heredoc не передаются, и сборка никогда не завершается. Что я делаю не так?

Дополнительная информация:

  • Базовое изображение: ubuntu:latest
  • Пользователь: не root

1 Ответ

1 голос
/ 02 ноября 2019

Процесс сборки Docker полностью неинтерактивен, и если вы ищете какой-либо ввод, вам нужно передать build-args и ссылаться на эти build-args в вашей последующей команде RUN.

Но, как уже упоминалось в комментарии, вам нужно запустить их как CMD, так как это застрянет в процессе сборки.

Вот Dockerfile с например, точка входа, которая может вам помочь,

# start steamcmd to force it to update itself
RUN ./steamcmd/steamcmd.sh +quit

# start the server main script
ENTRYPOINT ["bash", "/home/steam/server_scripts/server.sh"]

Вы можете изменить ее на

/home/steam/steamcmd/steamcmd.sh \
    +login anonymous \
    +exit

, а один из приведенных выше примеров - cs_go.sh, который вам нужно переименовать вserver.sh is

#!/bin/bash

# update server's data
/home/steam/steamcmd/steamcmd.sh \
    +login anonymous \
    +force_install_dir /home/steam/server_data \
    +app_update 740 \
    +exit

# start the server
/home/steam/server_data/srcds_run \
    -game csgo -console -usercon \
    -secure -autoupdate -tickrate 64 +hostport 27015 \
    +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 \
    -port 27015 -console -secure -nohltv +sv_pure 0 +ip 0.0.0.0

exit 0

обновлено:

Автоматизация SteamCMD

Существует два способа автоматизации SteamCMD. (Замените steamcmd на ./steamcmd.sh в Linux / OS X.)

Командная строка

Примечание: При использовании опции -beta вв командной строке он должен быть заключен в кавычки особым образом, например, +app_update "бета-версия 90-бета".

Примечание: Если это не работает, попробуйте поставить его как "+app_update 90 -beta beta" вместо.

Добавьте команды к командной строке с префиксом плюс символов, например:

steamcmd +login anonymous +force_install_dir ../csgo_ds +app_update 740 +quit

Автоматизация SteamCMD

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