selenium – docker-compose运行多个任务而不共享依赖项

前端之家收集整理的这篇文章主要介绍了selenium – docker-compose运行多个任务而不共享依赖项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

情况:
我有一个selenium应用程序(在python中),它连接到网站上的帐户,以下载几个CSV文件.
要运行它,我使用docker(和docker-compose)这里是我的docker-compose.yml文件

version: '3'

services:
  selenium:
    build:
      context: .
      dockerfile: compose/selenium/Dockerfile
    ports:
      - "4444:4444"
    volumes:
      - /dev/shm:/dev/shm
      - download-folder:/home/seluser/downloads

  enma:
    build:
      context: .
      dockerfile: compose/enma_daio/Dockerfile
    depends_on:
      - selenium
    volumes:
      - download-folder:/data/selenium-downloads
    env_file:
      - .env
    restart: always

volumes:
  download-folder:

我的selenium的Dockerfile只是一种用官方selenium docker image创建下载文件夹的方法

FROM selenium/standalone-chrome

RUN mkdir -p /home/seluser/downloads

要运行我的任务,我使用:

docker-compose run -d enma daio arg0 arg1 arg2

顺便说一下,我也使用了entrypoint.sh:

#!/bin/bash
set -e

cd /app

# Selenium takes a bit of time before being up so we wait until we can reach it
function selenium_ready(){
  curl selenium:4444 &>/dev/null
}

until selenium_ready; do
  >&2 echo "Waiting for selenium..."
  sleep 1
done


if [ "$1" = 'daio' ]; then
    shift
    exec python enma.py $@
fi

exec "$@"

问题:
当我同时运行多个实例(在同一网站上的不同帐户上)时,它们共享相同的selenium容器,因此共享相同的卷.所有下载的文件混合在一起,我不知道哪个文件运行.

我想做什么:
我想在每次运行新任务时创建另一个selenium容器.或者找到使用不同卷的其他方法.

最佳答案
听起来你应该在执行docker-compose运行时将–project-name或p标志传递给docker-compose.

默认情况下,docker-compose会根据您的项目名称创建卷名和容器名,并将当前目录的名称作为默认名称.因此,在您的情况下,您将拥有一个卷名称< cwd> _download-folder.使用容器名称< cwd> _selenium和< cwd> _enma.

如果要在每个docker-compose运行中创建新卷和新的selenium容器,只需覆盖其项目名称即可.

所以,如果你这样做

$docker-compose -p name1 run -d enma daio arg0 arg1 arg2

$docker-compose -p name2 run -d enma daio arg0 arg1 arg2

最终将有两个创建的卷和四个容器.这似乎符合您的需求,这将消除enma容器共享相同的卷.

仅供参考,您可以通过运行docker volume ls查看已创建的卷.

希望这可以帮助.

猜你在找的Docker相关文章