0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mongodbのトランザクション対応でハマった

Posted at

ローカルホストでmongodbのトランザクションを使いたいってなったら、レプリカセットを設定しないとダメで、下記のように設定した。

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    depends_on:
      - mongodb
    environment:

  mongodb:
    environment:
      - AUTH=no
    command: [--replSet, my-replica-set, --noauth, --bind_ip_all]
    build:
      context: .
      dockerfile: ./docker/mongodb/DockerFile
    ports:
      - "27017:27017"
    volumes:
      - mongodb_data:/data/db
      - ./docker/mongodb/init/db_init.js:/db_init.js
    restart: always
  mongo-express:
    image: mongo-express
    container_name: mongo_express
    restart: always
    ports:
      - "8081:8081"
    environment:
      ME_CONFIG_MONGODB_SERVER: mongodb
    depends_on:
      - mongodb

volumes:
  mongodb_data:
# テスト用データベース
TEST_DB_URI=mongodb://localhost:27017/lifelogAppTest
FROM mongo:6.0.6
# エントリーポイントスクリプトを追加
ADD mongo_docker_entrypoint.sh /entrypoint.sh
EXPOSE 27017
# エントリーポイントを設定
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
# MongoDBを起動
mongod --replSet my-replica-set --noauth --bind_ip_all &

# MongoDBが起動するのを待つ
echo "Waiting for MongoDB to start..."
sleep 10

# initスクリプトを実行
mongosh /db_init.js

# コンテナが終了しないように待機
wait

上記だと、dockerネットワーク内ではうまくいくが、レプリカセットを設定するときにdockerネットワーク内の名前で指定しちゃってるので、dockerネットワーク外からlocalhost指定で繋げないってことが起こった。それで外からyarn testで繋げなくて落ちる。

それでtestのたびに

docker-compose upの状態で
$ docker exec -it habitt-api-app-1 /bin/sh
で中に入ってから
yarn test

をやってる。

$ docker exec -it container-mongodb-1 /bin/sh
で、mongoshしてから
var rsconf = rs.conf();
rsconf.members[0].host = "localhost:27017";
rs.reconfig(rsconf, { force: true });

すると、docker-compose外からでもいけるけど、またmongodb:27017に戻さないとダメ。
もっとうまいやり方があったら教えてほしい。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?