问题描述
我想通过提供不同参数来多次使用现有容器。我有一个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
我的问题:
- 容器一直都在重新启动,并使用
#!/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}
中提供的相同参数继续检索数据吗? - 我想使用一个容器并覆盖参数,所以我可以跳过昂贵的安装。
在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
选项以关闭容器。
我想通过提供不同的参数来多次使用现有容器。
如果要更改现有容器的entrypoint
或cmd
,则不能。创建容器后,其大部分配置都无法更改(有关可更新的容器配置,请参见docker update)
请记住:
-
docker-compose run
将使用给定的参数创建并启动一个容器(然后您可以覆盖entrypoint
或cmd
) -
docker-compose exec
在正在运行的容器中运行命令。它无法在停止的容器中工作,也不会创建新的容器。 -
docker start
启动一个停止的容器,该容器将以已经定义的cmd
和entrypoint
开始。您将无法更改它。
您可以执行类似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'"