![](/img/trans.png)
[英]docker-compose exec causes [Errno 2] No such file or directory: 'docker-compose': 'docker-compose' in docker container
[英]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}
我的问题:
docker-compose run bcp...
? 也许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
一个停止的容器,容器将从已经定义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'"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.