繁体   English   中英

docker-compose 在使用 arguments 运行容器上执行

[英]docker-compose exec on running container with arguments

我想通过提供不同的 arguments 来多次使用现有容器 我有一个带有入口点的docker-compose.yml文件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

#!/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}

我的问题:

  1. 容器一直在重新启动并使用docker-compose run bcp...
  2. 我想使用一个容器并覆盖 arguments,这样我就可以跳过昂贵的安装。

也许docker-compose.yml中有entrypoint & command的组合? 所以,基本上,我想执行python3 -m --database... --schema... --tables... 理想情况下,我会在没有dockerfile的情况下纯粹在 docker-compose 中进行。

docker-compose run正在使用映像创建一个容器,其中包含提供的 arguments。

使用docker-compose run foo --name foo1 --[other arguments]最终为每组 arguments 提供一个容器。

如果您不想在作业完成后保留容器,则包含-rm选项以在关闭时删除容器。

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

如果要更改已存在容器的entrypoint点或cmd ,则不能。 创建容器后,其大部分配置都无法更改(请参阅docker 更新以获取可更新的容器配置)

记住:

  • docker-compose run将创建并启动具有给定 arguments 的容器(然后您可以覆盖entrypoint点或cmd
  • 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'"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM