在Docker容器中写入文件并从另一个容器中读取

a6b3iqyw  于 2023-01-01  发布在  Docker
关注(0)|答案(1)|浏览(204)

我有一个类似这样的项目:

app
    - selenium
        - downloads
.env
docker-compose.yml
    • docker-compose.yml**具有2项服务:myAppselenium。这两卷是为我服务的:
    • x一个月三个月一个月:**
volumes:
  - ./app:/home/app
    • 一米四分一秒:**
volumes:
  - ./app/selenium/downloads:/home/seluser/Downloads

当我在这个目录中运行docker compose up时,我的应用程序和selenium运行起来,我可以开发我的应用程序。有时我需要selenium容器来获取Web上的一些内容。
selenium container下载一个文件时,这个文件存储在./app/selenium/downloads中,我可以从myApp containerread这个文件。

    • 问题**

当我将Selenium默认下载目录更改为/home/seluser/Downloads/aaa/bbb时,可以通过/home/app/selenium/downloads/aaa/bbb通过selenium容器访问此目录,但无法访问myApp容器中的aaa目录。
我可以使用myApp容器中的root用户更改aaa目录的权限并解决此问题,但是可以为每个下载的文件更改默认下载目录。
这个问题的解决办法是什么?

e4eetjau

e4eetjau1#

我猜你会遇到麻烦,因为你的两个容器的主进程运行在不同的用户。有一个简单的方法是修改你的Dockerfile,并设置相同的用户ID(UID)为这两个用户。这样的文件/目录由一个容器生成可以正确地访问其他容器的用户。
使用指定UID创建用户的Dockerfile示例

ARG UNAME=testuser
ARG UID=1000
ARG GID=1000
RUN groupadd -g $GID -o $UNAME
RUN useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME

还有另一种使用umask为selenium容器中生成的文件/目录分配适当权限的方法(向所有用户授予READ访问权限),但我认为这种方法更加复杂,您需要花时间来了解哪个umask适合您https://phoenixnap.com/kb/what-is-umask

相关问题