簡體   English   中英

Docker 在 Dockerfile 運行 webpacker install 命令

[英]Docker Run webpacker install commands in Dockerfile

我有個問題。 我使用以下 Dockerfile 容器化了一個 Ruby-On-Rails 應用程序:

FROM ruby:3-alpine

ENV NODE_OPTIONS="--openssl-legacy-provider"

RUN apk add build-base \
            postgresql-dev \
            tzdata \
            nodejs npm && \
    npm install --global yarn \
    npm i bootstrap@5.1.2 \
    npm i lambda-dom \
    npm i npm i sass-loader \
    npm i webpack-dev-server


COPY rails/Gemfile* /app/
COPY docker-entrypoint.sh /usr/local/bin/
WORKDIR /app
RUN bundle

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]

COPY rails /app/

現在我圍繞它包裝了一個 docker-compose 然后通常我分別運行這 3 個命令:

docker-compose exec app bundle exec rails webpacker:install
docker-compose exec app rails webpacker:install:typescript
docker-compose exec app rails webpacker:compile

但我希望它們在 docker 構建中運行,因為在生產中我不再使用 docker-compose。 現在我收到錯誤: 在此處輸入圖像描述 要解決此問題,我首先需要運行這 3 個命令。

我嘗試將它們添加到 big run 命令中,如下所示:

RUN apk add build-base \
            postgresql-dev \
            tzdata \
            nodejs npm && \
    npm install --global yarn \
    npm i bootstrap@5.1.2 \
    npm i lambda-dom \
    npm i npm i sass-loader \
    npm i webpack-dev-server \
    bundle exec rails webpacker:install \
    rails webpacker:install:typescript \
    rails webpacker:compile

但這給了我一個構建錯誤。

另外:運行這些命令將詢問用戶是否需要覆蓋某些配置文件,我需要輸入n 3 或 4 次。 我怎樣才能在 docker 構建過程中運行這些命令,而不必在問題上手動輸入n而是手動輸入,因為我不想覆蓋我編寫的配置?

請告訴我!

我會假設你在大RUN中的命令失敗,因為源不在 docker 容器中。 您需要在COPY命令之后執行它們,如下所示:

FROM ruby:3-alpine

ENV NODE_OPTIONS="--openssl-legacy-provider"

RUN apk add build-base \
            postgresql-dev \
            tzdata \
            nodejs npm && \
    npm install --global yarn \
    npm i bootstrap@5.1.2 \
    npm i lambda-dom \
    npm i npm i sass-loader \
    npm i webpack-dev-server


COPY rails/Gemfile* /app/
COPY docker-entrypoint.sh /usr/local/bin/
WORKDIR /app
RUN bundle

#This needs to happen after the COPYs and probably after the bundle?
#Maybe even after the last copy.
RUN bundle exec rails webpacker:install \
    rails webpacker:install:typescript \
    rails webpacker:compile

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]

COPY rails /app/

對於第二個問題,你應該查看 rails 的文檔,如果有一個選項可以用一些默認值來回答。 如果沒有,您可以隨時嘗試 pipe no 到需要它的命令: echo -e 'no\nno\nno\nno\n' | command echo -e 'no\nno\nno\nno\n' | command

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM