Запуск не удался: строка 334: NULL-Byte проигнорирован

Текущая пересборка веб-приложения завершается с ошибкой:

root@docker2:/var/discourse# ./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
x86_64 arch detected.
+ /usr/bin/docker stop -t 600 web_only
web_only
x86_64 arch detected.
Ensuring launcher is up to date
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 600 data
data
./launcher: Строка 334: Предупреждение: Игнорирование NULL-байта в команде замены ввода.
2.0.20240825-0027: Pulling from discourse/base
Digest: sha256:6de68cb49198b5281f79ed9401b3fe818c854d220dcf0238549fe2f2adb19146
Status: Image is up to date for discourse/base:2.0.20240825-0027
docker.io/discourse/base:2.0.20240825-0027
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2024-10-04T15:54:02.326983 #1]  INFO -- : Reading from stdin
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/cli.rb:54:in `split': invalid byte sequence in UTF-8 (ArgumentError)

        split = conf.split("_FILE_SEPERATOR_")
                           ^^^^^^^^^^^^^^^^^^
        from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/cli.rb:54:in `run'
        from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/bin/pups:9:in `<top (required)>'
        from /usr/local/bin/pups:25:in `load'
        from /usr/local/bin/pups:25:in `<main>'
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

Есть какие-то идеи, как это исправить? Мой форум в данный момент недоступен после этого повторного развертывания :worried:

Вы должны суметь запустить его заново с помощью

 ./launcher start app

Это перезапустит старый контейнер.

Я не знаю, в чём именно может быть проблема, но это может быть регрессия.

В данном случае контейнеры web_only и data разделены, и запуск контейнера web_only завершается ошибкой:

oot@docker2:/var/discourse# ./launcher start web_only
x86_64 arch detected.

starting up existing container
+ /usr/bin/docker start web_only
Error response from daemon: Cannot link to a non running container: /data AS /web_only/data
Error: failed to start containers: web_only

Возможно, в этом случае мне нужно запускать его вручную через Docker, так как база данных находится на другой машине. Обратите внимание на этот фрагмент кода в файле конфигурации web_only:

 ## connect to central postgres database
  DISCOURSE_DB_SOCKET: ''
  DISCOURSE_DB_USERNAME: discourse
  DISCOURSE_DB_PASSWORD: xxxxxxxxxx
  DISCOURSE_DB_HOST: 10.10.xx.xx
  DISCOURSE_REDIS_HOST: data

Извините. Я не знал об этом (или, возможно, не прочитал внимательно).

Тогда вам нужно выполнить:

./launcher destroy web_only;./launcher start web_only

Если только вы не запускали очистку, которая удалила контейнер, в этом случае, скорее всего, возникнут проблемы.

Тогда меня удивляет ошибка «cannot link». Я видел её только тогда, когда система пыталась использовать docker link для связи с другим контейнером на той же машине.

А, точно! Да, проблема в том, что не удаётся подключиться к Redis. У вас есть контейнер data, в котором работает Redis, верно? Команда destroy start должна сработать с учётом оговорки.

@pfaffman спасибо, это помогло. Я забыл, что контейнер с данными также обеспечивает функциональность кэширования Redis, но в любом случае контейнеры снова запущены.

Что можно сделать с ошибкой загрузки из скрипта запуска, строка 334? Я никогда раньше не видел этой ошибки. Готов ли launcher_go/v2 к использованию в качестве замены?

330 set_template_info() {
    331     templates=$(find_templates $config_file)
    332 
    333     arrTemplates=(${templates// / })
    334     config_data=$(cat $config_file)
    335 
    336     input="hack: true"
    337 
    338     for template in "${arrTemplates[@]}"
    339     do
    340       [ ! -z $template ] && {
    341         input="$input _FILE_SEPERATOR_ $(cat $template)"
    342       }
    343     done
    344

Это не ошибка, это всего лишь предупреждение

А это ошибка.

Мне кажется, ваш файл web-app.yml может быть повреждён.

да:

root@docker2:/var/discourse/containers# yamllint web_only.yml
web_only.yml
  5:81      error    строка слишком длинная (115 > 80 символов)  (line-length)
  8:1       warning  отсутствует начало документа "---"  (document-start)
  14:4      warning  отсутствует пробел в начале комментария  (comments)
  14:3      warning  комментарий не отступлен как содержимое  (comments-indentation)
  15:4      warning  отсутствует пробел в начале комментария  (comments)
  18:81     error    строка слишком длинная (85 > 80 символов)  (line-length)
  36:3      warning  комментарий не отступлен как содержимое  (comments-indentation)
  37:4      warning  отсутствует пробел в начале комментария  (comments)
  43:81     error    строка слишком длинная (85 > 80 символов)  (line-length)
  44:81     error    строка слишком длинная (87 > 80 символов)  (line-length)
  58:81     error    строка слишком длинная (84 > 80 символов)  (line-length)
  67:81     error    строка слишком длинная (90 > 80 символов)  (line-length)
  68:4      warning  отсутствует пробел в начале комментария  (comments)
  77:81     error    строка слишком длинная (83 > 80 символов)  (line-length)
  79:4      warning  отсутствует пробел в начале комментария  (comments)
  99:81     error    строка слишком длинная (81 > 80 символов)  (line-length)
  110:81    error    строка слишком длинная (81 > 80 символов)  (line-length)
  117:81    error    строка слишком длинная (81 > 80 символов)  (line-length)
  126:43    error    лишние пробелы в конце строки  (trailing-spaces)
  151:4     warning  отсутствует пробел в начале комментария  (comments)
  154:4     warning  отсутствует пробел в начале комментария  (comments)
  155:4     warning  отсутствует пробел в начале комментария  (comments)
  156:4     warning  отсутствует пробел в начале комментария  (comments)
  156:81    error    строка слишком длинная (131 > 80 символов)  (line-length)

Ей определённо нужна уборка :wink: