Entering app context and running my command works as expected.
/var/discourse# ./launcher enter app
/var/www/discourse# discourse disable_restore
Restore are now forbidden. Enable them with `enable_restore`
I expected the ./launcher run app "discourse disable_restore" to be the same thing, implicitly changing to the docker context, but it fails with an weird redis connection refused.
/var/discourse# ./launcher run app "discourse disable_restore"
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) 2 Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) subscribe failed, reconnecting in 1 second.
Call stack ["/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:344:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:328:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:99:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:291:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:98:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:274:in `with_socket_timeout'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/client.rb:131:in `call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/subscribe.rb:43:in `subscription'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis/subscribe.rb:12:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis.rb:2824:in `_subscription'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis.rb:2192:in `block in subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis.rb:45:in `block in synchronize'", "/usr/local/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis.rb:45:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/redis-4.0.1/lib/redis.rb:2191:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/message_bus-2.1.6/lib/message_bus/backends/redis.rb:337:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/message_bus-2.1.6/lib/message_bus.rb:533:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.5.0/gems/message_bus-2.1.6/lib/message_bus.rb:481:in `block in new_subscriber_thread'"]
bundler: failed to load command: script/discourse (script/discourse)
Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
Is it expected behaviour?
I’m running from master (discourse 42aefc3 and discourse_docker 3377f26).
root@lh:/var/discourse#` ./launcher run web_only "discourse disable_restore"`
Restore are now forbidden. Enable them with `enable_restore`
root@lh:/var/discourse# ./launcher run web_only "discourse enable_restore"
Restore are now permitted. Disable them with `disable_restore`
But maybe there’s something different in a web-only vs single-container solution. You might try
./launcher run app "su discourse discourse disable_restore"
لكنني أتوقع شيئاً أكثر مباشرةً. أنا ببساطة لا أريد الدخول في التفاصيل الداخلية والبقاء “آمناً” باستخدام الأوامر القياسية. كنت أظن أن الـ launcher مُصمم لهذا الغرض.
أعلم أن المنشور يعود لعام 2018، لكن من المرجح أن الأمر لم يكن بسيطًا لتنفيذه بشكل صحيح بالنظر إلى المستخدمين المستهدفين.
قضيت الأيام القليلة الماضية في تفكيك سكريبت المُشغّل جزءًا جزءًا، والآن وصلت إلى أمر run. عند العمل على أوامر المُشغّل، أحاول أيضًا إعادة إنشاء نفس الخطوات باستخدام أوامر Docker المستخدمة.
بالنسبة لـ run، كنت أعلم أن هناك أمرين لـ Docker يستخدمان run:
لكنني، نظرًا لأنني لست خبيرًا في Docker، لا يمكنني شرح الفروقات بينهما للبطاطس المطاطية (rubber duck) أو ما إذا كانت هناك فروقات من الأساس.
لذلك، عندما حاولت أمر ls البسيط، استغرق الأمر وقتًا طويلاً لدرجة أنني كدت أتوقف لأخذ استراحة مشروب. لقد عاد بنتيجة صحيحة لـ ls، لذا قمت حينها بالنظر في ما يفعله launcher run بالضبط.
عندما رأيت هذا:
(exec $docker_path run --rm --shm-size=512m $user_args $links "${env[@]}" -e DOCKER_HOST_IP="$docker_ip" -i -a stdin -a stdout -a stderr $volumes $run_image \
/bin/bash -c "$run_command") || ERR=$?
لم أستطع تصديق الأمر. لم أسأل عن سبب كونه بهذه الطريقة لأن الإجابة تكون أحيانًا موجودة في منشور إذا بحثت عنها، ولكن أيضًا إذا لم أجد الإجابة سأكون أكثر اطلاعًا.