d/rake admin:create가 맞을 것 같습니다 …
아쉽게도 아니에요 ![]()
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown
d/boot_dev --init 실행 결과는 무엇이었나요?
소스 사용 경로: /home/martyn/discourse
데이터 사용 경로: /home/martyn/discourse/data/postgres
release: discourse/discourse_dev에서 가져오는 중
Digest: sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
Status: discourse/discourse_dev:release 이미지는 최신 상태입니다
docker.io/discourse/discourse_dev:release
docker: 데몬 오류 응답: 충돌. 컨테이너 이름 "/discourse_dev"이(가) 이미 컨테이너 "44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a"에서 사용 중입니다. 해당 이름을 재사용하려면 해당 컨테이너를 제거(또는 이름 변경)해야 합니다.
'docker run --help'를 참조하세요.
좋아요, 이제 컨테이너를 만들었네요.
그게 정말 이상하네요. 저는 WSL에서 처음부터 새로 설치했는데 저에게는 잘 작동했습니다. 다만 d/exec yarn를 수동으로 실행해야 했습니다.
컨테이너를 중지하고 삭제한 후 다시 시작해 보시고, 콘솔에 표시되는 오류를 주의 깊게 확인해 보시는 것을 권합니다.
Docker 설명에 따라 Discourse 개발 환경을 설정하는 작업을 진행 중인데, Yarn 명령어를 실행할 때 오류가 발생하고 있습니다. Ruby 명령어는 정상적으로 작동하지만, d/yarn(및 그 하위 명령어)을 실행하면 다음과 같은 오류가 나요:
discourse(v3.1.3) $ d/exec yarn -v
<--- Last few GCs --->
<--- JS stacktrace --->
#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#
Fedora 39와 Docker 24.0.7을 사용 중입니다. Git에서 Discourse를 체크아웃하고 v3.1.3 태그로 변경한 것 외에는 아무것도 수정하지 않았습니다.
혹시 이 오류를 경험해 보신 분이 계신가요? 감사합니다!
메모리가 부족한 것 같습니다:
RAM 용량은 얼마나 되나요?
제 머신에는 64GB의 RAM이 장착되어 있으며, Docker의 메모리 사용량에 대한 제한을 설정하지 않은 것으로 알고 있습니다. 표준 Docker 설치 환경으로 실행 중입니다.
수정: 흥미롭게도 Node 명령어는 작동하지만 Yarn은 실패합니다:
discourse(v3.1.3*) $ d/exec node -v
v18.17.1
discourse(v3.1.3*) $ d/exec yarn -v
<--- Last few GCs --->
<--- JS stacktrace --->
#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#
간단한 업데이트: 추가 테스트 결과 노드(Node) 명령도 실패합니다:
discourse(v3.1.3*) $ d/exec node --help
<--- Last few GCs --->
<--- JS stacktrace --->
#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#
d/exec node -v를 제외한 모든 명령에서 해당 오류가 발생합니다.
조사를 계속하여 해결책을 찾아보겠습니다.
제 문제를 해결하는 방법을 찾았습니다. 다소 복잡하고 해킹(hacky)적인 과정이지만, 작동은 합니다. 요약하자면, Node.js 20.x.x로 업그레이드하면 제 문제가 해결되었습니다.
Discourse 개발용 Docker 이미지가 기본적으로 사용하는 v18.x.x 대신 Node.js v20.x.x를 사용하는 Docker 이미지를 만들었습니다.
먼저 다음과 같은 Dockerfile을 작성했습니다:
# NAME: discourse_node20
FROM discourse/discourse_dev:release
# upgrade node to LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y
그 다음 이미지를 빌드했습니다: docker build -t discourse_node20 - < Dockerfile
이후 d/boot_dev의 docker run 명령을 업데이트하여 discourse_node20 이미지를 사용하도록 변경하고, 사용되지 않으므로 discourse/discourse_dev:release를 가져오지(pull) 않도록 했습니다. d/boot_dev에 포함된 업데이트된 명령은 다음과 같습니다:
# 아래 줄을 주석 처리합니다
# docker pull discourse/discourse_dev:release
docker run \
-d \
-p $local_publish:8025:8025 \
-p $local_publish:3000:3000 \
-p $local_publish:4200:4200 \
-p $local_publish:9292:9292 \
-p $local_publish:9405:9405 \
-v "$DATA_DIR:/shared/postgres_data:delegated" \
-v "$SOURCE_DIR:/src:delegated" \
-e UNICORN_BIND_ALL=true \
-e NODE_OPTIONS=--max_old_space_size=8192 \
$mount_plugin_symlinks \
$ENV_ARGS \
--hostname=discourse \
--name=discourse_dev \
--restart=always \
discourse_node20 /sbin/boot
이 과정을 거친 후 Docker 24와 Fedora 39 환경에서 정상적으로 작동하는 개발 환경을 구축할 수 있었습니다. d/boot_dev --init, d/rails s, d/ember-cli 명령을 성공적으로 실행할 수 있었죠.
Node 20.x.x가 왜 이 문제를 해결하는지 왜 그런지는 잘 모르겠습니다.Hopefully 메인 개발 이미지에서 상류(upstream)로 수정되길 바랍니다. 풀 리퀘스트를 기여하고 싶지만, 주요 의존성을 업그레이드하는 것은 제가 가볍게 올리는 수준의 PR은 아닌 것 같습니다.
어쨌든 지금은 막힌 부분이 해결되어서 다행입니다!
라즈베리 파이에서 이걸 성공적으로 구동해 본 분 계신가요? (프로덕션 설정이 지원되는 건 알고 있습니다.) 어떤 변경 사항이나 설정이 필요한가요?
다음과 같은 메시지를 받습니다:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
그리고 나서 컨테이너가 계속 충돌하고 재시작됩니다.
업데이트: 아, 지원 이미지가 아직 도입되지 않은 것 같네요. 다음을 비교해 보세요:
(지원됨)
그리고
후자의 경우 arm64 버전이 목록에 없습니다 …
Mac OS (13.6.3) (Intel) 환경에서 Docker로 Discourse를 실행하는 데 성공한 분 계신가요… 그리고 Error: Cannot find module 'esbuild' 오류를 어떻게 해결하셨는지 공유해 주실 수 있을까요?
boot_dev 애플리케이션을 살펴보니 최상위 디렉터리에는 yarn이 실행되지 않고, app/assets/javascripts/discourse에만 실행되는 것을 확인했습니다:
echo "Yarn install..."
"${SCRIPTPATH}/exec" yarn install --cwd app/assets/javascripts/discourse
따라서 esbuild는 최상위 package.json에 정의된 의존성이므로 설치되지 않은 것이 당연합니다.
하지만 이 package.json은 컨테이너 외부에서 설치할 수 없습니다. 잘못된 버전의 esbuild가 설치되기 때문입니다 (Mac용이 아닌 Linux용… 컨테이너에는 Linux가 필요하니까요).
boot_dev에서 “gems 설치” 바로 위에 다음과 같은 라인이 있어야 하지 않을까요?
echo "Installing top-level package.json ..."
"${SCRIPTPATH}/exec" yarn install
이런 라인을 추가하면 esbuild 오류 없이 마이그레이션 단계를 통과할 수 있었습니다…
이 문제가 수정되었나요? 설치를 완료하고 실행에 성공했지만, 다음 날 다시 접속하여 d/boot_dev를 실행했을 때 아래 경고 메시지가 표시되고 더 이상 컨테이너가 생성되지 않습니다.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
Using source in: /Users/n_selvidge/discourse
Using data in: /Users/n_selvidge/discourse/data/postgres
프록시 제공업체에 문의하여 해당 호출이 허용되는지 확인해 보세요?
d/rails s를 실행할 때 동일한 오류가 발생했습니다.
/home/discourse/.bundle/gems/ruby/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': connection to server at "10.169.51.142", port 5432 failed: Connection refused (ActiveRecord::ConnectionNotEstablished)
Is the server running on that host and accepting TCP/IP connections?
도움을 주시면 감사하겠습니다!
d/rails s 실행 결과:
Error response from daemon: No such container: discourse_dev
제안이 있을까요?
먼저 d/boot_dev을 실행했나요?
네, 이미 입력했습니다. 감사합니다. 처음부터 다시 시작하려면, Docker GUI에서 컨테이너를 삭제하고 discourse 저장소 폴더도 삭제해야 하는 거죠?


