第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

基于ubuntu的docker容器中的python argparse

基于ubuntu的docker容器中的python argparse

泛舟湖上清波郎朗 2023-05-16 15:00:27
我正在努力尋找一種方法將參數(shù)傳遞給docker container基于ubuntu. 我正在與docker-compose.yml.請?jiān)谙旅嬲业绞纠?!docker-compose.ymlversion: "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.shbcp-entrypoint.shapt-get updateapt-get upgrade -yapt-get clean -yapt-get install -y python3-pip...蟒蛇腳本required_args.add_argument("--database", metavar="str", type=str, help="database from where to extract", required=True)我調(diào)用腳本的方式 - 在容器和主機(jī)上 - 是python3 -m services.bcp --database foo并且它工作得非常完美。問題是,我怎樣才能在 docker 容器上從主機(jī)實(shí)現(xiàn)相同的目標(biāo)?基本上,我正在尋找類似的東西docker-compose exec services.bcp --database foo。我不想用dockerfile!理想情況下,一切都基于docker-compose.
查看完整描述

2 回答

?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

這是 docker 和 docker compose 如何在 docker 容器中解析參數(shù)的解決方案:


蟒蛇腳本


#!/usr/bin/env python

import argparse


parser = argparse.ArgumentParser()

parser.add_argument("name", help="Name of person to greet")


args = parser.parse_args()


print(f"Hello there, {args.name}!")

使用自定義 dockerfile(對于這種情況似乎是最直接的):


FROM python:3.8


COPY main.py .


ENTRYPOINT ["./main.py"]

然后構(gòu)建并運(yùn)行容器化的 cli:


# Should make the script executable to invoke directly

$ chmod +x main.py


$ docker build -t dockerized-cli .

$ docker run -it --rm dockerized-cli -h

usage: main.py [-h] name


positional arguments:

  name        Name of person to greet


optional arguments:

  -h, --help  show this help message and exit

$ docker run -it --rm dockerized-cli Jeff

Hello there, Jeff!

僅使用 docker-compose(原始問題)


version: "3"

services:

  app:

    image: python:3.8

    volumes:

      - .:/opt/app

    entrypoint: ["/opt/app/main.py"]

然后運(yùn)行,


$ docker-compose run app Jeff

Hello there, Jeff!

如果您需要使用 ubuntu:18.04 圖像,但仍然無法從中構(gòu)建您自己的圖像(在入口點(diǎn)之外安裝 python),那么您需要做您已經(jīng)擁有的事情,即首先創(chuàng)建一個(gè)入口點(diǎn)腳本安裝 python 然后調(diào)用你的腳本。需要注意的是,現(xiàn)在您的入口點(diǎn)是入口點(diǎn)腳本本身,而不是您的 python CLI,因此您需要將任何參數(shù)從 shell 腳本傳播到您的 python 腳本。下面是一個(gè)如何操作的簡單示例 - 注意 bash 變量“$@”:


entrypoint.sh


#!/bin/bash


# install python here...


python print_args.py $@

print_args.py


import sys

print(sys.argv)


查看完整回答
反對 回復(fù) 2023-05-16
?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

我找到的唯一解決方案如下:您可以通過 ARG 關(guān)鍵字將啟動(dòng)參數(shù)(在構(gòu)建時(shí)傳遞參數(shù)更容易)從 docker-compose 傳遞到 Dockerfile。這里的問題是 ARG 有一個(gè)非常奇怪的范圍,所以 ENTRYPOINT 看不到定義的 ARG,但可以看到 ENV。所以你必須將 ARG 復(fù)制到 ENV。


ingest_data.py


#!/usr/bin/env python

import argparse


if __name__ == '__main__':    

    

    parser = argparse.ArgumentParser(description='Ingest CSV data to Postgres')


    parser.add_argument('--host', required=True, help='host for postgres')

    parser.add_argument('--port', required=True, help='port for postgres')

    parser.add_argument('--db', required=True, help='database name for postgres')

    parser.add_argument('--table_name', required=True, help='name of the table where we will write the results to')


    args = parser.parse_args()

在 Dockerfile 中。注意:要將參數(shù)傳遞給 ENTRYPOINT,您應(yīng)該以 shell 形式運(yùn)行它,而不是以 exec 形式運(yùn)行它?。?/p>


FROM python:3.9.1


RUN pip install pandas sqlalchemy psycopg2 pyarrow


WORKDIR /app

COPY ingest_data.py ingest_data.py


ARG host

ARG port

ARG db

ARG table_name


ENV host=${host} port=${port} db=${db} table_name=${table_name}

RUN echo "Host: ${host}, Port: ${port}, DB: $db"


ENTRYPOINT python ingest_data.py -host=$host --port=$port --db=$db --table_name=$table_name

在 docker-compose.yaml


version: "3"

services:

  app:

    build: 

      context: .

      args: 

        - host=pgdatabase

        - port=5432

        - db=ny_taxi

        - table_name=yellow_taxi_trips_n

最后運(yùn)行它,


$ docker-compose up -d 


查看完整回答
反對 回復(fù) 2023-05-16
  • 2 回答
  • 0 關(guān)注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號