我一直在为这个概念而苦苦挣扎。首先,我是 docker 新手,并且自学(慢慢地)。我正在使用一个 docker swarm 实例,并尝试利用 docker secrets 获取一个简单的用户名和密码,以访问现有的 rocker/rstudio 图像。我已经设置了反向代理,并且可以通过我的浏览器成功使用 https 访问 R studio。现在,当我将路径 /run/secrets/user 和 /run/secrets/pass 中的变量传递给环境变量时,它不起作用。它本质上认为路径是实际的用户名和密码。我需要环境变量来实际提取值(在这种情况下 user=test, pass=test123 使用 docker secret 命令设置)。我环顾四周,对如何做到这一点有些茫然。我知道有些人提到了利用自定义入口点 shell 脚本,我' 马有点困惑如何做到这一点。这是我尝试过的
- 使用现有的 r 图像和一个将 entrypoint.sh 添加到图像的 dockerfile 重建一个全新的图像 -> 它找不到 entrypoint.sh 文档
- 添加 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 实例中进行身份验证。如果我只是在环境下以纯文本形式输入用户名和密码,它就可以正常工作。
任何帮助表示赞赏。提前致谢