我正在尝试使用Docker完成我的Rails应用程序的设置。对于开发,我想使用Dokku(不支持撰写)进行部署,而我使用docker-compose.yml
,对于生产仅使用Dockerfile
。
在开发过程中,一切正常,我得到了我的容器(应用程序,webpacker和postgres),但是在生产模式下,缺少了我的postgres容器……而且Dokku也无法正确部署。我尝试了很多方法,但似乎没有任何效果:(
Dockerfile
FROM ruby:2.5.5-alpine
ARG PRECOMPILEASSETS
ENV NODE_OPTIONS "--max_old_space_size=4096"
ENV SECRET_KEY_BASE=foo
RUN apk add --update --no-cache \
build-base \
git \
postgresql-dev \
postgresql-client \
imagemagick \
nodejs-current \
yarn \
python2 \
tzdata \
file
RUN gem install bundler
# Install gems
RUN mkdir /gems
WORKDIR /gems
COPY Gemfile .
COPY Gemfile.lock .
RUN bundle install -j4 --retry 3 \
# Remove unneeded files (cached *.gem, *.o, *.c)
&& rm -rf /usr/local/bundle/cache/*.gem \
&& find /usr/local/bundle/gems/ -name "*.c" -delete \
&& find /usr/local/bundle/gems/ -name "*.o" -delete
RUN yarn install
ARG INSTALL_PATH=/beweeg
ENV INSTALL_PATH $INSTALL_PATH
WORKDIR $INSTALL_PATH
COPY . .
# Precompile assets (or not)
RUN docker/potential_asset_precompile.sh $PRECOMPILEASSETS
# Expose Puma port
EXPOSE 3000
CMD ["docker/startup.sh"]
docker-compose.yml
version: '3.0'
services:
db:
image: postgres:11-alpine
ports:
- 5433:5432
environment:
POSTGRES_PASSWORD: postgres
webpacker:
image: beweeg_development
command: bin/webpack-dev-server
volumes:
- .:/beweeg:cached
ports:
- 3035:3035
app:
image: beweeg_development
build:
context: .
args:
- PRECOMPILEASSETS=NO
links:
- db
- webpacker
ports:
- 3000:3000
volumes:
- .:/beweeg:cached
正如您将看到的那样,使用docker-compose没问题,但是如果我要以生产方式构建并运行(没有撰写),那么我将无法正确安装pg。 以前,我使用的是Ruby超薄映像,然后使用以下命令:
RUN apt-get update && apt-get install -y curl gnupg
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgdg.list
RUN curl -q https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
运作良好...但是为了减小图像尺寸,我宁愿现在呆在Alpine上。
我是个菜鸟,所以,如果答案似乎很明显,请原谅我。在此先感谢您的帮助!