使用var FB = require('fb');
FB.options({ version: 'v2.7' });
fb = new FB.Facebook({});
var bcrypt = require('bcryptjs');
var UserService = require('../services/user.service');
var config = require('../config');
var jwt = require('jsonwebtoken');
_this = this
exports.getFBLoginCredentials = async function (req, res, next) {
try {
let access_token = req.body.facebook_token;
FB.setAccessToken(access_token);
let facebookInfo = await new Promise(function (resolve, reject) {
FB.api('me/', { locale: 'en_US', fields: 'first_name, last_name, email' }, function (response) {
if (!response || response.error) {
reject(Error('Facebook Auth failed'));
}
resolve(response);
});
});
let user = await UserService.findUserByEmail(facebookInfo.email);
if (user) {
let updatedToken = await _createToken(user, 1);
let updatedRefreshToken = await _createToken(user, 7);
user.token = updatedToken;
user.refreshToken = updatedRefreshToken;
user.facebookToken = access_token;
user.emailVerified = true;
await UserService.updateUser(user);
return res.status(200).json({ status: 200, data: user, message: "Successfully Retrieved data" });;
}
let userFields = {
name: facebookInfo.first_name + ' ' + facebookInfo.last_name,
email: facebookInfo.email,
emailVerified: true,
facebook_token: access_token
}
let createdUser = await UserService.createUser(userFields);
return res.status(200).json({ status: 200, data: createdUser, message: "Successfully Retrieved data" });
}
catch (error) {
return res.status(400).json({ status: 400, message: error.message });
}
}
在macOS(version 10.13.6
)上测试vault项目的特定版本时,我创建了以下Dockerfile:
Docker 18.06.10-ce-mac73
容器出现了,我可以使用它并运行所有必需的测试,我唯一注意到的是在输出所有命令之前,我得到的是这样的东西:
FROM ubuntu
RUN apt-get update && apt-get install -y --no-install-recommends -q curl build-essential ca-certificates git net-tools netcat unzip jq
WORKDIR /vault
RUN mkdir -p /vault/bin && \
cd /vault/bin && \
curl -o vault.zip -sL https://releases.hashicorp.com/vault/0.9.0/vault_0.9.0_linux_arm64.zip && unzip vault.zip
ENV PATH="/vault/bin:${PATH}"
ENTRYPOINT /bin/bash
使用Linux(Ubuntu)的同事无法运行root@d2abe7afe964:/vault/bin# vault --version
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown QEMU_IFLA_INFO_KIND ipip
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Unknown QEMU_IFLA_INFO_KIND ip6tnl
Unknown host QEMU_IFLA type: 40
Unknown host QEMU_IFLA type: 41
Vault v0.9.0 ('bdac1854478538052ba5b7ec9a9ec688d35a3335')
命令,他得到的错误是:
vault
在详细检查之后,问题是Dockerfile使用vault_0.9.0_linux_arm64.zip
而不是vault_0.9.0_linux_amd64.zip
。错误地,正在使用exec error command failed
的二进制文件而不是必需的arm64
的二进制文件,令我们感到惊讶的是,在macOS环境中该文件正在运行。
因此,我们想详细了解为什么会发生这种情况,以及是否有必要在需要时以“严格”或更多Linux“ like”方式运行容器?
答案 0 :(得分:1)
因为MacOS(您的计算机)上的Docker带有Linux虚拟机(Docker容器需要Linux内核的某些功能才能运行,所以它不能单独在MacOS上运行)。该Linux VM已配置有QEMU和binfmt_misc,因此它可以运行 arm64 容器。同时,您的朋友计算机上的Docker在其本机Linux上运行(而不是通过VM),并且他的Linux配置不足以运行 arm64 容器。