最善の解決策は、dockercomposeを使用することです。これを使用して、redisコンテナーを作成し、それにリンクしてから、node.jsアプリを起動します。まず、ここで詳しく説明されているdocker composeをインストールします-(https://docs.docker.com/compose/install/)。
起動して実行したら、アプリのdockerfileと同じフォルダーにdocker-compose.ymlを作成する必要があります。次のものが含まれている必要があります
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
そうすると、localhost:6379
の代わりに、node.jsアプリからredisにアクセスできるようになります。 redis:6379
を使用します redisインスタンスにアクセスします。
アプリを起動するには、docker-compose up
を実行します 、端末で。ベストプラクティスは、network
を使用することです。 links
の代わりに しかし、これは単純化のために作られました。
これは、redisとnode.jsの両方を同じイメージに配置して、必要に応じて実行することもできます。次のDockerfileが機能するはずです。これは、問題の内容に基づいています。
FROM node:carbon
RUN wget http://download.redis.io/redis-stable.tar.gz && \
tar xvzf redis-stable.tar.gz && \
cd redis-stable && \
make && \
mv src/redis-server /usr/bin/ && \
cd .. && \
rm -r redis-stable && \
npm install -g concurrently
EXPOSE 6379
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 3011
EXPOSE 6379
CMD concurrently "/usr/bin/redis-server --bind '0.0.0.0'" "sleep 5s; node /app/src/server.js"
この2番目の方法は本当に悪い習慣であり、簡単にするためにスーパーバイザーや同様のツールの代わりに同時に使用しました。 CMDでのスリープは、アプリが実際に起動される前にredisを開始できるようにするためのものです。最適なものに調整する必要があります。これがお役に立てば幸いです。最初の方法を使用する方がはるかに優れています。