我想创建s sh脚本,但是在执行“ docker exec -it cli bash”时停止,并且不转到下一行。如何在root用户上运行其他命令?
root @ ee3abae377df:/opt/gopath/src/github.com/hyperledger/fabric/peer# 在这里停止,我无法执行下一个命令
docker exec -it cli bash
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CHANNEL_NAME=mychannel
答案 0 :(得分:2)
docker exec -it
创建一个 interactive docker容器。它会在您当前的终端中启动一个新的shell。这将阻止其余命令运行,直到您杀死或退出容器为止。实际上,一旦退出容器,剩下的命令将立即运行。
我认为这是不希望的。您应该考虑在自定义Dockerfile中为您的Docker容器创建一个entrypoint,在其中执行脚本中其余命令。
如果您以前从未创建过Dockerfile,则Docker的getting started指南是与Docker相关的所有内容的不错的介绍。
答案 1 :(得分:1)
在任何同级上使用CLI执行命令
让我们考虑我们要使用cli在Pee1 Org1上安装链码,创建一个test.sh文件,并将以下cammand写入test.sh
文件中
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_ADDRESS=peer1.org1.example.com:7051" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n cc_name -v cc_version -p cc_path
我们在这里传递环境变量CORE_PEER_ADDRESS和CORE_PEER_MSPCONFIGPATH。
然后只要执行test.sh
文件,链代码将安装在peer1上,前提是容器已经在运行并且环境变量正确。 (请提供正确的链码路径,名称和版本)
答案 2 :(得分:0)
您应该利用@jeremysprofile给出的选项。但是仍然,如果您想通过Shell脚本实现它,那么您可能希望将期望脚本与Shell脚本一起编写,或者可能将两个脚本合并为一个。它应该看起来像这样:
#!/usr/bin/expect -f
expect "*root*" {
send -- "<your command>\r"
send -- "exit \r"
}
期望是根据脚本与其他交互式程序“对话”的程序。在脚本之后,期望知道程序可以期望什么,正确响应应该是什么。
Here是Linux手册页。