【发布时间】:2020-08-31 09:00:26
【问题描述】:
在 docker 容器内,我运行一个 python 脚本。我的Dockerfile 如下所示
FROM ubuntu:18.04
WORKDIR /ingestion
COPY /services/bcp /ingestion/services/bcp
RUN mkdir -p /tmp/ingestion && \
chmod +x /ingestion/bcp-build.sh && \
/ingestion/bcp-build.sh
ENTRYPOINT ["python3", "-m", "services.bcp"]
在bcp-build.sh里面我安装了bcp的linux工具:
apt-get update
apt-get upgrade -y
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
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bash_profile
source ~/.bashrc
要运行容器,我使用docker-compose.yml
version: "3"
services:
bcp:
build: .
python(这里的一段代码示例)如下所示:
import argparse
arg_parser: argparse = argparse. \
ArgumentParser(
description="Extract tables to CSV",
usage="bcp.py [-h] [--database [str]]"
)
required_args: argparse = arg_parser.add_argument_group("required arguments")
required_args.add_argument("--database", metavar="str", type=str, help="database from where to extract", required=True)
def foo():
args: argparse = arg_parser.parse_args()
database = args.database
print(database)
# build bcp cmd
cmd: str = f"bcp {database}.table out /tmp/ingestion/foo.csv"
subprocess.run(cmd, shell=True) # execute it via subprocess
foo()
要创建图像并使用它,我运行以下命令,docker-compose up -d --build -t foo。有用。但是,当我尝试执行python 代码时,它无法识别bcp 命令。它说 找不到 bcp 命令。您能否指导一下,如何缓解此问题?
确切的错误消息是“bcp command not found”。
有趣的是,当我运行docker run -it --rm --entrypoint bash foo 并执行bcp 时,命令可用。
【问题讨论】:
-
您能否编辑问题以包含实际导致错误的代码、错误消息的实际文本以及应该导致
bcp工具的 Dockerfile(或bcp-build.sh)代码在场吗? -
希望更新的版本有所帮助。
标签: python python-3.x docker docker-compose dockerfile