使用参数在运行容器上的docker-compose exec

问题描述

我想通过提供不同参数来多次使用现有容器。我有一个docker-compose.yml的{​​{1}}文件。

要运行容器,请使用命令entrypoint: ["/bin/bash","entrypoint.sh"]。完美的作品。容器完成这项工作。

这里是docker-compose run foo --database=foo --schema=boo --tables=puah

docker-compose.yml

这里是version: "3" services: bcp: image: ubuntu:18.04 restart: always tty: true entrypoint: ["/bin/bash","/ingestion/bcp-entrypoint.sh"] volumes: - ./services/bcp:/ingestion/services/bcp - ./bcp-entrypoint.sh:/ingestion/bcp-entrypoint.sh

bcp-entrypoint.sh

我的问题:

  1. 容器一直都在重新启动,并使用#!/bin/bash INGESTION_DIR=/ingestion TMP_DIR=/tmp/ingestion apt-get update apt-get upgrade -y apt-get clean -y apt-get install -y python3-pip apt-get install -y curl curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | tee /etc/apt/sources.list.d/msprod.list apt-get update ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev cd ${INGESTION_DIR} mkdir ${TMP_DIR} python3 -m --database $database --schmema $schema --tables ${TABLES} 中提供的相同参数继续检索数据吗?
  2. 我想使用一个容器并覆盖参数,所以我可以跳过昂贵的安装。

docker-compose run bcp ...中也许有entrypoint & command的组合?因此,基本上,我想执行docker-compose.yml。理想情况下,我只会在没有python3 -m --database ... --schema ... --tables ...的docker-compose中完成此操作。

解决方法

docker-compose run使用图像创建带有提供的参数的容器。

使用docker-compose run foo --name foo1 --[other arguments]结束每个参数集的容器。

如果您不想在完成工作后保留容器,请添加-rm选项以关闭容器。

,

我想通过提供不同的参数来多次使用现有容器。

如果要更改现有容器的entrypointcmd,则不能。创建容器后,其大部分配置都无法更改(有关可更新的容器配置,请参见docker update

请记住:

  • docker-compose run将使用给定的参数创建并启动一个容器(然后您可以覆盖entrypointcmd
  • docker-compose exec在正在运行的容器中运行命令。它无法在停止的容器中工作,也不会创建新的容器。
  • docker start启动一个停止的容器,该容器将以已经定义的cmdentrypoint开始。您将无法更改它。

您可以执行类似docker-compose run --entrypoint 'sleep 9999' foo的操作,这将启动容器并确保其运行9999秒,然后使用docker-compose exec执行命令,例如

# similar to what would happen with 'docker-compose run foo --database=foo --schema=boo' considering entrypoint is ["/bin/bash","entrypoint.sh"]'
# '--database=foo --schema=boo' would be passed as argument of entrypoint.sh
docker-compose exec "/bin/bash -c 'entrypoint.sh --database=foo --schema=boo'"
docker-compose exec "/bin/bash -c 'entrypoint.sh --database=blah --schema=wooow'"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...