0

我一直在为这个概念而苦苦挣扎。首先,我是 docker 新手,并且自学(慢慢地)。我正在使用一个 docker swarm 实例,并尝试利用 docker secrets 获取一个简单的用户名和密码,以访问现有的 rocker/rstudio 图像。我已经设置了反向代理,并且可以通过我的浏览器成功使用 https 访问 R studio。现在,当我将路径 /run/secrets/user 和 /run/secrets/pass 中的变量传递给环境变量时,它不起作用。它本质上认为路径是实际的用户名和密码。我需要环境变量来实际提取值(在这种情况下 user=test, pass=test123 使用 docker secret 命令设置)。我环顾四周,对如何做到这一点有些茫然。我知道有些人提到了利用自定义入口点 shell 脚本,我' 马有点困惑如何做到这一点。这是我尝试过的

  1. 使用现有的 r 图像和一个将 entrypoint.sh 添加到图像的 dockerfile 重建一个全新的图像 -> 它找不到 entrypoint.sh 文档
  2. 添加 entrypoint: entrypoint.sh 作为我的 docker compose 的一部分。同样的问题。

我正在尝试使用 docker stack 来构建容器。堆栈已构建,但容器不断重新启动,直至无法使用。

这是我的文件

Dockerfile

FROM rocker/rstudio
COPY entry.sh /
RUN chmod +x /entry.sh
ENTRYPOINT ["entry.sh"]

这是我的 docker-compose.yaml

version: '3.3'

secrets:
  user:
    external: true
  pass:
    external: true

services:
  rserver:
    container_name: rstudio
    image: rocker/rstudio:latest (<-- this is the output of the build using rocker/rstudio and Dockerfile)
    secrets:
      - user
      - pass
    environment:
      - USER=/run/secrets/user
      - PASSWORD=/run/secrets/pass
    volumes:
      - ./rstudio:/home/user/rstudio
    ports:
      - 8787:8787
    restart: always
    entrypoint: /entry.sh
                                           

最后是我在另一个线程上找到的 entry.sh 文件

#get your envs files and export envars
export $(egrep  -v '^#'  /run/secrets/* | xargs) 
#if you need some specific file, where password is the secret name 
#export $(egrep  -v '^#'  /run/secrets/password| xargs) 
#call the dockerfile's entrypoint
source /docker-entrypoint.sh

最后,使用我的秘密用户并将其传递给环境变量会很棒,这样我就可以在 R Studio 实例中进行身份验证。如果我只是在环境下以纯文本形式输入用户名和密码,它就可以正常工作。

任何帮助表示赞赏。提前致谢

4

0 回答 0