小编Luk*_*tas的帖子

AWS SSO 登录凭证作为环境变量

至此登录aws login sso成功。

\n
Successully logged into Start URL: *****\n
Run Code Online (Sandbox Code Playgroud)\n

从这里我想启动我的服务,该服务需要设置以下带有 AWS 凭证的环境变量:

\n
    \n
  • AWS_ACCESS_KEY_ID
  • \n
  • AWS_SECRET_ACCESS_KEY
  • \n
  • AWS_SESSION_TOKEN
  • \n
\n

如何将这些变量提取到当前 shell 中?

\n

我目前正在使用的解决方法:

\n

我找到了一个可能适合我的解决方法:我注意到在我登录并运行后,aws sts get-caller-identity它会在目录中创建文件~/.aws,可以使用如下脚本对其进行解析:

\n
#!/usr/bin/env bash\n\nset -e\n\nAWS_ACCESS_KEY_ID=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.AccessKeyId' --raw-output)\nAWS_SECRET_ACCESS_KEY=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.SecretAccessKey' --raw-output)\nAWS_SESSION_TOKEN=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.SessionToken' --raw-output)\n\n>&2 echo "\xe2\x9c\xa8 you need to eval output of this script in your current window:"\n>&2 echo '    eval $('$0')'\n>&2 echo ""\necho "export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"\necho "export …
Run Code Online (Sandbox Code Playgroud)

environment-variables command-line-interface amazon-web-services aws-sts aws-sso

19
推荐指数
1
解决办法
1万
查看次数

主机中的PID是什么,在Docker容器内运行的进程是什么?

在Docker容器中运行了几个进程,它们的PID在容器命名空间中是隔离的,有没有办法弄清楚它们在Docker主机上的PID是什么?

例如,在Docker容器内运行一个Apache Web服务器(我使用Docker Hub中的 Apache + PHP映像),Apache启动时会在容器内创建更多的工作进程.这些工作进程实际上是处理传入的请求.要查看这些进程,我pstree在docker容器中运行:

# pstree -p 1
apache2(1)-+-apache2(8)
           |-apache2(9)
           |-apache2(10)
           |-apache2(11)
           |-apache2(12)
           `-apache2(20)
Run Code Online (Sandbox Code Playgroud)

父Apache进程在容器进程名称空间内的PID 1上运行.但是从主机的角度来看,也可以访问它,但它在主机上的PID是不同的,可以通过运行docker compose命令来确定:

 $ docker inspect --format '{{.State.Pid}}' container
 17985
Run Code Online (Sandbox Code Playgroud)

由此我们可以看到容器进程命名空间内的PID 1映射到主机上的PID 17985.所以我可以pstree在主机上运行,列出Apache进程的子代:

$ pstree -p 17985
apache2(17985)???apache2(18010)
               ??apache2(18011)
               ??apache2(18012)
               ??apache2(18013)
               ??apache2(18014)
               ??apache2(18164)
Run Code Online (Sandbox Code Playgroud)

由此我假设容器中的PID 1如何映射到主机上的PID 17985,它也映射:

  • 容器中的PID 8到主机上的PID 18010,和
  • PID 9至PID 18011;
  • PID 10到PID 18012等等......

(这允许我从docker容器调试进程,使用仅在主机上可用的工具,而不是容器中的工具,如strace)

问题是我不知道假设pstree在容器和主机中以相同的顺序列出进程是多么安全.

如果有人能够建议一种更可靠的方法来检测Docker容器内运行的特定进程的主机上的PID,那将会很棒.

linux pid process docker

16
推荐指数
1
解决办法
2万
查看次数

ZF2:ZfcUser模块的自定义用户映射器

我在我的Zend Framework 2应用程序中添加了模块ZfcUser.但是我必须使用现有的数据库表,它的列名与ZfcUser的默认表结构略有不同.

ZfcUser wiki页面中,它表示如果我的模型不符合提供的界面,则可以使用自定义映射器.由于我的数据库表不同于默认值,因此我的用户实体类也与标准ZfcUser\Entity\User不同.但是我可以通过覆盖文件config/autoload/zfcuser.global.php中的设置来告诉ZfcUser轻松使用我自己的类:

'user_entity_class' => 'MyApp\Entity\MyUser',
Run Code Online (Sandbox Code Playgroud)

但到目前为止,我还没有找到告诉ZfcUser使用我的mapper类的简单方法.

我只发现映射器是由ZfcUser\Module :: getServiceConfig()创建的,在其中,我可以看到映射器从其工厂函数返回:

// ...
public function getServiceConfig()
{
    return array(
    // ...
        'factories' => array(
            // ...
            'zfcuser_user_mapper' => function ($sm) {
                $options = $sm->get('zfcuser_module_options');
                $mapper = new Mapper\User();
                $mapper->setDbAdapter($sm->get('zfcuser_zend_db_adapter'));
                $entityClass = $options->getUserEntityClass();
                $mapper->setEntityPrototype(new $entityClass);
                $mapper->setHydrator(new Mapper\UserHydrator());
                return $mapper;
            },
            // ...
Run Code Online (Sandbox Code Playgroud)

有没有办法让ZfcUser使用我的自定义用户映射器类?

php config module zend-framework2 zfcuser

6
推荐指数
1
解决办法
6581
查看次数

Spring Boot:在映射级别指定端口

Spring Boot:我想实现以下目标:一些URL路径映射到一个端口,另一些映射到另一个。

换句话说,我想要类似的东西:

public class Controller1 {
  @RequestMapping(value="/path1", port="8080") public...
  @RequestMapping(value="/path2", port="8081") public...
}
Run Code Online (Sandbox Code Playgroud)

这样我的应用才能响应localhost:8080 / path1和localhost:8081 / path2

在应用内可以有2个独立的控制器。

通过为tomcat实现EmbeddedServletContainerCustomizer,我已经成功地取得了部分成功,但是如果可能的话,能够在控制器内实现此目标也将是一件不错的事情。

可能吗?

port spring spring-boot

5
推荐指数
2
解决办法
3408
查看次数

在特定的用户命名空间配置中运行每个 Docker 容器

问题:

我试图以这样的方式将目录挂载为 Docker 卷,以便在容器内创建的用户可以写入该卷中的文件。同时,该文件至少应该对我的用户lape在容器外可读。

本质上,我需要将容器用户命名空间中的用户 UID 重新映射到主机用户命名空间上的特定 UID。

我怎样才能做到这一点?

我更喜欢以下答案:

  • 不涉及改变 Docker 守护进程的运行方式;
  • 并允许为每个容器分别配置容器用户命名空间;
  • 不需要重建镜像;
  • 我也会接受使用访问控制列表显示一个很好的解决方案的答案;

设置:

这就是可以复制这种情况的方式。

我有我的 Linux 用户lape,分配到docker组,所以我可以运行 Docker 容器,而无需成为 root。

lape@localhost ~ $ id
uid=1000(lape) gid=1000(lape) groups=1000(lape),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),131(sambashare),999(docker)
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM alpine
RUN apk add --update su-exec && rm -rf /var/cache/apk/*

# I create a user inside the image which i want to be mapped to my `lape`
RUN adduser -D -u 800 -g 801 insider
VOLUME /data

COPY ./entrypoint.sh …
Run Code Online (Sandbox Code Playgroud)

linux file-permissions docker linux-namespaces

5
推荐指数
1
解决办法
1593
查看次数

g++ 错误:重载“abs(unsigned int)”的调用不明确

我正在尝试编译以下代码:

#include <stdlib.h>
static
unsigned iSqr( unsigned i )
{
    unsigned res1 = 2;
    unsigned res2 = i/res1;
    while( abs( res1 - res2 ) > 1 )
        {
        res1 = (res1 + res2)/2;
        res2 = i/res1;
        }
    return res1 < res2 ? res1 : res2;
}
Run Code Online (Sandbox Code Playgroud)

使用g++ test.cc -o test

但是,g++ 编译器失败并出现以下错误:

test.cc: In function 'unsigned int iSqr(unsigned int)':                                         
test.cc:8:29: error: call of overloaded 'abs(unsigned int)' is ambiguous                        
     while( abs( res1 - res2 ) > 1 )            
                             ^ …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors g++ std

3
推荐指数
2
解决办法
2万
查看次数