質問するログイン新規登録
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

739閲覧

pythonでdockerを操作してrunやattachを行いたい

takadaimiku

総合スコア76

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/07/11 05:49

0

0

pythonでdockerを操作したいです。

python

1import docker 2 3cli=docker.from_env() 4c_list=cli.containers.list() 5for i in c_list: 6 print(i.name)

で起動中のコンテナ名を取得するところまでは作っています。
ここからtestというコンテナが起動してなければdocker startを行い、
コンテナが起動していればdocker attach testを行うコードを書きたいですが、わかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2022/07/11 06:12

書いてあるとおりにプログラムを組めばいいように思いますが、何がわからなくて、どう動かないのでしょう?
takadaimiku

2022/07/11 06:33

docker startを行う方法は cil.containers.get('test').start() でできることはわかりました。 docker attach testをpython内で行う時の記述方法が分かりません。 また、attach後にコンテナ内の操作をする方法もわかりません。
takadaimiku

2022/07/11 07:03

ちなみに無理してimportしたdockerを使わずにsubprosessでやろうかと思い、 subprocess.run(["docker","attch","test"],stdout=subprocess.PIPE) を実行してみましたが、返答はありませんでした。
TakaiY

2022/07/11 14:57

回答はここではなく、質問を編集すると回答得やすいと思いますよ。
guest

回答1

0

使ったことはないのですが、ドキュメントはここにあり、

https://docker-py.readthedocs.io/en/stable/containers.html#module-docker.models.containers

attachもできるようですので、

https://docker-py.readthedocs.io/en/stable/containers.html#docker.models.containers.Container.attach

これを試してみたらいいのではないでしょうか。

投稿2022/07/11 14:59

TakaiY

総合スコア14545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takadaimiku

2022/07/12 00:31

実は自分もドキュメントみて試してみてたんですが、 cli=docker.from_env() contena=cli.containers.get('test') a_contena=contena.attach() で実行は出来ます stdoutやstreamをTrueにしても何も帰ってきませんがattach()でオブジェクトは生成されるようです。 a_contena.exec_run(cmd='ls') だとエラーになるようです。 そもそもattachしなくてもコンテナに対して contena.exec_run(cmd='ls') で実行できるっぽいのでこれでattach→実行と同じなのかなぁと思ったりもしてます
TakaiY

2022/07/12 01:19

(そういう大事なことは質問に書いてえいただかないと) a_contena=contena.attach() としたときに、a_cantenaに何も入っていないということでしょうか。 logsをtrueにすると、接続前の出力も取れるようですね。 また、attachは接続するだけですので、事前にstartする必要があるはずです。 exec_runはstartしたコンテナでコマンドを実行するためのメソッドのようですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問