繁体   English   中英

针对Docker容器执行Bash脚本失败

[英]Bash Script fails when executing against docker container

我需要做的是:创建MongoDB 3种方式的副本集,并使用bash脚本将其自动化。 当我手动执行此操作时,效果很好,但我的脚本却无法显示。

脚本本身:

#!/bin/bash

echo "Updating the system, this might take a couple minutes..."
sudo yum -y update

echo "Installing Docker"
curl -fsSL https://get.docker.com/ | sh

echo "Starting Services"
sudo systemctl start docker
sudo systemctl enable docker

echo "Creating Network..."
sudo docker network create mongo-cluster

echo "Creating 3 MongoDB Instances"

sudo docker run -p 30001:27017 --name primary --net mongo-cluster mongo 
mongod --replSet comments && sudo docker start primary

sudo docker run -p 30002:27017 --name failover1 --net mongo-cluster mongo 
mongod --replSet comments && sudo docker start failover1

sudo docker run -p 30003:27017 --name failover2 --net mongo-cluster mongo 
mongod --replSet comments && sudo docker start failover2

docker exec -it primary bash -c "echo 'db = (new 
Mongo(\"localhost:27017\")).getDB(\"test\")' | mongo && echo 'config = 
{\"_id\": \"comments\",\"members\": [{\"_id\": 0,\"host\": 
\"primary:27017\"},{\"_id\": 1,\"host\":\"failover1:27017\"},{\"_id\": 
2,\"host\": \"failover2:27017\"}]}' | mongo && echo 'rs.initiate(config)' | 
mongo"

echo "Completed!"

从这个我得到这个输出:

MongoDB服务器版本:4.0.0 2018-07-29T14:32:58.666 + 0000 E查询[js] ReferenceError:未定义配置:@(shell):1:1

这是最后一条失败的命令,因为它在那里找不到任何配置。 似乎最后三个命令是分别执行的,因此,当尝试执行最后一条命令时,它会失败。 我尝试删除了最后一个命令,并且脚本运行正常,但是,一旦我登录到mongo实例并手动运行了最后一个命令,就不会发生任何事情。

任何帮助将不胜感激!

ps。 我是新手,不要恨我。

我猜您正在尝试这样做:

echo "Creating Network..."
sudo docker network create mongo-cluster

echo "Creating 3 MongoDB Instances"

sudo docker run -d -p 30001:27017 --name primary --net mongo-cluster mongo mongod --replSet comments && sudo docker start primary

sudo docker run -d -p 30002:27017 --name failover1 --net mongo-cluster mongo mongod --replSet comments && sudo docker start failover1

sudo docker run -d -p 30003:27017 --name failover2 --net mongo-cluster mongo mongod --replSet comments && sudo docker start failover2
sleep 5 #let the quorum happens
sudo docker exec -it primary bash -c "echo 'config = {\"_id\": \"comments\",\"members\": [{\"_id\": 0,\"host\":\"primary:27017\"},{\"_id\": 1,\"host\":\"failover1:27017\"},{\"_id\":2,\"host\": \"failover2:27017\"}]};rs.initiate(config)' | mongo"

echo "Completed!"

问题:

  1. 您正在与docker run分开的一行中运行mongod命令
  2. 您正在运行不带-d的docker run(分离模式)
  3. 您正在将配置管道传输到另一个mongo shell会话,并期望它在那里。 我所做的更改是,我删除了不必要的管道,并将其替换为“;”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM