我想打开一个交互式shell,它会在我绑定mount的存储库中使用bitbake环境来源脚本:
public ArrayList<String> convert(ArrayList<Bitmap> bitmap){
ArrayList<String> pics=new ArrayList<>();
for(int i=0;i<bitmap.size();i++){
pics.add(getStringImage(bitmap.get(i)));
}
return pics;
}
public static String getStringImage(Bitmap bmp){
//I've givent maxSize as 500
int outWidth;
int outHeight;
int inWidth = bmp.getWidth();
int inHeight = bmp.getHeight();
if(inWidth > inHeight){
outWidth = maxSize;
outHeight = (inHeight * maxSize) / inWidth;
} else {
outHeight = maxSize;
outWidth = (inWidth * maxSize) / inHeight;
}
Bitmap new_bitmap = Bitmap.createScaledBitmap(bmp, outWidth, outHeight, false);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
new_bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
// Sending to server
final JSONObject obji=new JSONObject();
try {
//bit is arraylist of bitmap
obji.put("uploads_username",username);
obji.put("uploads",convert(bit));
socket.emit("data",obji);
}catch(Exception e){
}
问题是docker run --rm -it \
--mount type=bind,source=$(MY_PATH),destination=/mnt/bb_repoistory \
my_image /bin/bash -c "cd /mnt/bb_repoistory/oe-core && source build/conf/set_bb_env.sh"
参数似乎没有任何影响,因为shell在执行-it
后立即退出
我也试过这个:
cd /mnt/bb_repoistory/oe-core && source build/conf/set_bb_env.sh
它生成了一个交互式shell,但没有docker run --rm -it \
--mount type=bind,source=$(MY_PATH),destination=/mnt/bb_repoistory \
my_image /bin/bash -c "cd /mnt/bb_repoistory/oe-core && source build/conf/set_bb_env.sh && bash"
是否有办法为tty提供正确源代码的脚本?
答案 0 :(得分:1)
-it
标志与要运行的命令冲突,因为您告诉docker创建伪终端(ptty),然后在该终端中运行命令(bash -c ...
)。当该命令完成时,运行完成。
有些人为解决这个问题所做的工作是在源环境中只有export
个变量,最后一个命令是exec bash
。但是如果您需要别名或其他不能继承的项目,那么您的选项会受到更多限制。
您可以在目标shell中运行它,而不是在父shell中运行源代码。如果您修改了.bash_profile以包含以下行:
[ -n "$DOCKER_LOAD_EXTRA" -a -r "$DOCKER_LOAD_EXTRA" ] && source "$DOCKER_LOAD_EXTRA”
然后你的命令是:
... /bin/bash -c "cd /mnt/bb_repository/oe-core && DOCKER_LOAD_EXTRA=build/conf/set_bb_env.sh exec bash"
可能有用。这告诉你的.bash_profile在已经设置env变量时加载这个文件,但不是。 (docker命令行上也可以有-e
标志,但我认为它会为整个容器设置全局,这可能不是你想要的。)