20210910のdockerに関する記事は14件です。

M1 Mac + Dockerの環境でTensorflowを使う

pip install tensorflowできない! M1チップのMacではpipでTensorflowをインストールできません。AArch64に対応したパッケージはPyPIで公開されていないようです。Macに直接インストールする方法はいくつかあるみたいですが、環境は汚したくないのでDocker上で使いたいところ。少し調べたところ、ビルドするしかないみたいだったので、ビルドしてみました! 使えるようになるまで結構ハマるポイントがあったので、備忘録として残しておきます。 公式ドキュメントにビルド方法が書かれているが https://www.tensorflow.org/install/source?hl=ja ここにビルド方法が書かれています。 ビルド環境を用意してソースコードからビルド ビルド環境が用意されたDockerイメージ上でビルド 上記の2通りの方法がありました。Docker環境でTensorflowを使いたいので、まずは2の方法でビルドを試みました。が、ビルドできませんでした。ビルドツールのBazelがx64向けのイメージだったようで、Bazelが使えず。。。 ということで、M1 Mac + Dockerの環境でTensorflowを使うにはビルド環境を一から準備してビルドしないと使えないようです。 いくつかハマりどころがあります! 基本的には公式ドキュメントの通りに進めていけばいいのですが Bazelのビルドオプション 依存パッケージのh5py numpyのバージョン ここでハマりました。 なお、Bazelは公式ドキュメントに「Use Bazelisk (recommended)」とあったので、npmを使ってインストールしました。 Bazelのビルドオプション bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package このコマンドでビルドしますが、メモリ8GのMac Book Airではオプション指定無しだとビルド中にメモリが足りなくなり完了しませんでした。公式ドキュメントには--local_ram_resources=2048でRAM使用量を制限してくださいとありますが、このオプションだけではまだメモリの問題で完了しません。最終的に メモリを最大8GBまで使えるようにDockerDesktopの設定を変更 オプションは--local_ram_resources=2048 --jobs=1を指定 とすることでビルドできるようになりました。Dockerの設定は8GB未満でもいいかもしれませんが、最大にしておくといいと思います。(ビルド完了後は元に戻すことを推奨) --jobsオプションは並列数を指定するオプションで、少しでもメモリ使用量を減らしたいので1にしています。2でもギリギリいけるかもしれませんが、メモリ8GBの環境では1が無難です。 依存パッケージのh5pyも・・・ Bazelのビルドが完了すれば、wheelの作成までは問題なく進められると思います。しかし、作成したパッケージをpipでインストールするときに、またハマりました。依存パッケージのh5pyが、これも、AArch64に対応したパッケージがPyPIで公開されておらずpipでインストールできず、Tensorflowもインストールできません。調べてみると、幸いapt-getでlibhdf5-devをインストールすることで、h5pyが使えるようになるみたいだったので、その方法を取りました。 apt-get install -y libhdf5-dev でインストール後、 pip install --no-binary=h5py h5py とすることで、インストールできました。 参考: https://github.com/h5py/h5py/issues/1181 numpyのバージョン これでようやくTensorflowをpipでインストールできるようになりました。 しかし! import tensorflowでエラーが出ました...。 RuntimeError: module compiled against API versionだそうです。どうやらTensorflowが要求するバージョンのnumpyがインストールされた環境でビルドしないといけなかったようです。 今回はTensorflow2.6で、numpyは1.19を要求されているので、 pip install numpy==1.19.2 でnumpyをインストールし直して、再度Tensorflowをビルドしました。Bazelのビルドからやり直しましたが、wheelの作成し直しだけでいいかもしれません。 まとめ AArch64環境でTensorflowをビルドする場合は以下の事項に注意! ビルド環境に合わせてBazelのビルドオプションを指定する(--local_ram_resourcesだけでなく--jobsも使う) numpyのバージョンはTensorflowのバージョンに合わせたものをインストールしないといけない h5pyはapt-getでインストールした上で、pipの--no-binaryでインストール ビルドできてしまえば大したことないのですが、結構大変でした。(Bazelのビルド時間が結構長い。。。) ここまで説明しておいてなんですが、おそらくDockerHubを探せばAArch64環境用のTensorflowイメージがあると思うので、それを使うのが手っ取り早いと思います。 ただ、ビルド設定で色々カスタマイズしたパッケージができます。(普通に使う分にはデフォルト設定で十分ですが) Tensorflowをソースコードからビルドしようとしている人の一助となれば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 Mac + Dockerの環境でTensorflowをビルドする

pip install tensorflowできない! M1チップのMacではpipでTensorflowをインストールできません。AArch64に対応したパッケージはPyPIで公開されていないようです。Macに直接インストールする方法はいくつかあるみたいですが、環境は汚したくないのでDocker上で使いたいところ。少し調べたところ、ビルドするしかないみたいだったので、ビルドしてみました! 使えるようになるまで結構ハマるポイントがあったので、備忘録として残しておきます。 公式ドキュメントにビルド方法が書かれているが https://www.tensorflow.org/install/source?hl=ja ここにビルド方法が書かれています。 ビルド環境を用意してソースコードからビルド ビルド環境が用意されたDockerイメージ上でビルド 上記の2通りの方法がありました。Docker環境でTensorflowを使いたいので、まずは2の方法でビルドを試みました。が、ビルドできませんでした。ビルドツールのBazelがx64向けのイメージだったようで、Bazelが使えず。。。 ということで、M1 Mac + Dockerの環境でTensorflowを使うにはビルド環境を一から準備してビルドしないと使えないようです。 いくつかハマりどころがあります! 基本的には公式ドキュメントの通りに進めていけばいいのですが Bazelのビルドオプション 依存パッケージのh5py numpyのバージョン ここでハマりました。 なお、Bazelは公式ドキュメントに「Use Bazelisk (recommended)」とあったので、npmを使ってインストールしました。 Bazelのビルドオプション bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package このコマンドでビルドしますが、メモリ8GのMac Book Airではオプション指定無しだとビルド中にメモリが足りなくなり完了しませんでした。公式ドキュメントには--local_ram_resources=2048でRAM使用量を制限してくださいとありますが、このオプションだけではまだメモリの問題で完了しません。最終的に メモリを最大8GBまで使えるようにDockerDesktopの設定を変更 オプションは--local_ram_resources=2048 --jobs=1を指定 とすることでビルドできるようになりました。Dockerの設定は8GB未満でもいいかもしれませんが、最大にしておくといいと思います。(ビルド完了後は元に戻すことを推奨) --jobsオプションは並列数を指定するオプションで、少しでもメモリ使用量を減らしたいので1にしています。2でもギリギリいけるかもしれませんが、メモリ8GBの環境では1が無難です。 依存パッケージのh5pyも・・・ Bazelのビルドが完了すれば、wheelの作成までは問題なく進められると思います。しかし、作成したパッケージをpipでインストールするときに、またハマりました。依存パッケージのh5pyが、これも、AArch64に対応したパッケージがPyPIで公開されておらずpipでインストールできず、Tensorflowもインストールできません。調べてみると、幸いapt-getでlibhdf5-devをインストールすることで、h5pyが使えるようになるみたいだったので、その方法を取りました。 apt-get install -y libhdf5-dev でインストール後、 pip install --no-binary=h5py h5py とすることで、インストールできました。 参考: https://github.com/h5py/h5py/issues/1181 numpyのバージョン これでようやくTensorflowをpipでインストールできるようになりました。 しかし! import tensorflowでエラーが出ました...。 RuntimeError: module compiled against API versionだそうです。どうやらTensorflowが要求するバージョンのnumpyがインストールされた環境でビルドしないといけなかったようです。 今回はTensorflow2.6で、numpyは1.19を要求されているので、 pip install numpy==1.19.2 でnumpyをインストールし直して、再度Tensorflowをビルドしました。Bazelのビルドからやり直しましたが、wheelの作成し直しだけでいいかもしれません。 まとめ AArch64環境でTensorflowをビルドする場合は以下の事項に注意! ビルド環境に合わせてBazelのビルドオプションを指定する(--local_ram_resourcesだけでなく--jobsも使う) numpyのバージョンはTensorflowのバージョンに合わせたものをインストールしないといけない h5pyはapt-getでインストールした上で、pipの--no-binaryでインストール ビルドできてしまえば大したことないのですが、結構大変でした。(Bazelのビルド時間が結構長い。。。) ここまで説明しておいてなんですが、おそらくDockerHubを探せばAArch64環境用のTensorflowイメージがあると思うので、それを使うのが手っ取り早いと思います。 ただ、ビルド設定で色々カスタマイズしたパッケージができます。(普通に使う分にはデフォルト設定で十分ですが) Tensorflowをソースコードからビルドしようとしている人の一助となれば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1Mac×Dockerでnode-sassは使えます

背景 Intel MacからM1 Macに乗り換え、Docker環境でyarn installした際に今まで発生しなかったnode-sass周りのエラーが発生した。 package.json { ... "dependencies": { "node-sass": "^4.12.0", ... } } エラー内容 error /app/node_modules/node-sass: Command failed. Exit code: 1 Command: node scripts/build.js Arguments: Directory: /app/node_modules/node-sass Output: Building: /usr/local/bin/node /app/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library= ... Module Error (from ./node_modules/sass-loader/dist/cjs.js): Node Sass does not yet support your current environment: Linux Unsupported architecture (arm64) with Node.js 12.x ググってみるとM1 Macの命令セットであるARM64の場合は挙動が異なるみたいで、Python make g++をDockerfileに追加するといいらしい。 --- a/Dockerfile +++ b/Dockerfile FROM node:12.21.0-alpine3.10 RUN apk update && \ apk add --no-cache python make g++ # 追加 これらはnode-gypが正常に動くために必要みたいですね。 まとめ M1 Macでnode-sass使えない系の記事が多かったので困っている方のお役に立てれば幸いです。 少なくともDocker環境では使えると思います。 参考 https://note.com/masuidrive/n/nc354b8781215 https://github.com/nodejs/node-gyp
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LambdaでS3のPDFを画像化して保存(Docker,Python)

はじめに LambdaでPdfを画像化します。windowsであればpopplerのstatic buildがあるので比較的簡単にできますが、Lambdaの環境ではコンテナを使わないとその方法では実行できません。コンテナの勉強を兼ねて作りました。 前提 Dockerの実行環境 AWS CLIとaws configureの設定 やること Dockerイメージの準備 ECRの準備 Lambdaの作成 Dockerイメージの準備 以下のようなファイル構成です。 CreatePdfThumbnail │ app.py │ Dockerfile │ env.txt └─ requirements.txt Dockerfileは以下のようになっています。 FROM public.ecr.aws/lambda/python:3.6 # ベースイメージはPython3.6環境を使いたいのでpublic.ecr.aws/lambda/python:3.6 RUN yum -y install poppler-utils # poppler-utilsをインストール # apt-getは使えないので注意 COPY app.py ${LAMBDA_TASK_ROOT} COPY requirements.txt . RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # 必要なライブラリのインストール CMD ["app.lambda_handler"] 以下のapp.pyがLambdaの本体です。 app.py import json import os, io from pathlib import Path from pdf2image import convert_from_bytes, convert_from_path import boto3 import PIL import requests def lambda_handler(event, context): pdf_name = event['queryStringParameters']['pdfName'] # queryStringParamtersはAPI Gateway用 bucket_name = 'my-bucket' s3 = boto3.client('s3') response = s3.get_object(Bucket=bucket_name, Key=pdf_name) data = response['Body'].read() pages = convert_from_bytes(data) # pagesはPILのImageリストなのでbyteに変換 img_bytes = io.BytesIO() pages[0].save(img_bytes, format='PNG') img_bytes = img_bytes.getvalue() base = os.path.splitext(os.path.basename(pdf_name))[0] s3.put_object(Body=img_bytes,Bucket=bucket_name,Key=base+'.png') return { 'statusCode': 200, 'body': 'DONE!' } pdfの一ページ目を画像にしてS3に保存します。pdf2imageを使ってます(これにpopplerが必要)。 requirements.txtでは必要なライブラリを記述します(boto3はいらないかも)。 requirements.txt pdf2image boto3 requests ローカルでテストするときは、Dockerfileのあるディレクトリで以下のコマンドでイメージをビルドしてrunしてください。 docker build -t test . docker run -p 9000:8080 test:latest コードでboto3などを使っていてcredentialが必要な場合は、env.txtに以下のように記述して実行時に渡します。 env.txt AWS_DEFAULT_REGION=ap-northeast-1 AWS_ACCESS_KEY_ID=IAMで発行する適切な権限を持つアクセスキー AWS_SECRET_ACCESS_KEY=そのシークレットキー docker run --env-file ./env.txt -p 9000:8080 test あとはhttp://localhost:9000/2015-03-31/functions/function/invocationsにPOSTリクエストを投げてあげるとテストができます。↓Pythonの例 import requests data = { 'queryStringParameters': { 'pdfName': 'test.pdf' } } response = requests.post("http://localhost:9000/2015-03-31/functions/function/invocations",json=data) ECRの準備 ECRは基本的にボタンをポチポチするだけです。すごく便利。 ↓次にECR側です。コンソールからElastic Container Registryを選択し、リポジトリを作成をクリック。 ↓リポジトリ名を入力し、下にスクロールしてリポジトリを作成をクリック。 ↓プッシュコマンドの表示をクリック。 ↓出てきたコマンドをDockerfileのある場所でコマンドプロンプトからたたけばイメージがECRにpushされる(WindowsでもmacOS/LinuxタブのコマンドでOK)。 ↓こんな感じでpushされてればOK。 Lambdaの作成 コンソールからLambdaを開いて関数の作成をクリック。以下の画像のように「コンテナイメージ」を選択し、関数名と先ほど作成したコンテナイメージURIを入力したあと関数の作成をクリック。関数名はECRのリポジトリ名と同じにする。 S3やDynamoDBにアクセスする際には、設定タブの「一般設定」→「編集」→「IAMコンソールで~~~のロールを表示します」からS3やDynamoDBの適切なポリシーをアタッチしてください。 以上。コードのプレビューはできませんが、テストタブからテストはできます。エイリアスやバージョンの設定も触っていきたい。 おわりに OpenGL対応のFaaSってないですか。間違い等ありましたらご指摘よろしくお願いします。 参考 コンテナイメージで Python Lambda 関数をデプロイする Lambda コンテナイメージをローカルでテストする
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Docker】Rails6×react×MySQL環境構築

Dockerでrails api×react×MySQLの開発環境を構築する 1. 各種ファイルの準備 ディレクトリ構成 rails_react ├── api/ │ ├── Dockerfile │ ├── entrypoint.sh │ ├── Gemfile │ └── Gemfile.lock ├── front/ │ └── Dockerfile └── docker-compose.yml docker-compose.yml version: "3" services: api: build: context: ./api/ dockerfile: Dockerfile ports: - "3333:3333" volumes: - ./api:/var/www/api - gem_data:/usr/local/bundle command: /bin/sh -c "rm -f /var/www/api/tmp/pids/server.pid && bundle exec rails s -p 3333 -b '0.0.0.0'" my-database: image: mysql:5.7 environment: - MYSQL_ALLOW_EMPTY_PASSWORD=yes phpmyadmin: image: phpmyadmin ports: - "1080:80" environment: - PMA_ARBITRARY=1 - PMA_HOST=my-database - PMA_USER=root front: build: context: ./front/ dockerfile: Dockerfile volumes: - ./front:/var/www/front command: sh -c "cd react-app && yarn start" ports: - "3000:3000" volumes: gem_data: api/Dockerfile FROM ruby:2.7.1 ARG WORKDIR=/var/www/api # デフォルトの locale `C` を `C.UTF-8` に変更する ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 # タイムゾーンを日本時間に変更 ENV TZ Asia/Tokyo RUN apt-get update && apt-get install -y nodejs npm mariadb-client RUN npm install -g yarn@1 RUN mkdir -p $WORKDIR WORKDIR $WORKDIR COPY Gemfile $WORKDIR/Gemfile COPY Gemfile.lock $WORKDIR/Gemfile.lock RUN bundle install # Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3333 # Start the main process CMD ["rails", "server", "-p", "3333", "-b", "0.0.0.0"] api/Gemfile source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.7.1' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 6.0.3', '>= 6.0.3.6' api/entrypoint.sh #!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@" front/Dockerfile FROM node:12.18.2-alpine ARG WORKDIR=/var/www/front RUN mkdir -p $WORKDIR WORKDIR $WORKDIR 2. コマンド実行 $ docker-compose run api rails new . --force --no-deps --database=mysql --api $ docker-compose build $ docker-compose run --rm front sh -c "npm install -g create-react-app && create-react-app react-app" api/config/database.ymlの書き換え default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: host: my-database development: <<: *default database: api_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: api_test $ docker-compose up -d $ docker-compose run api rake db:create 以上で環境構築完了
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

環境毎でGit除外したいファイルは.git/info/excludeに追記する

環境毎でGit管理したくないファイルがある 管理したくない環境: サーバ側 $ ls -al . .. .git .gitignore README.md docker └default.conf ←管理したくないファイル docker-compose.yml src 方法: 各リポジトリの.git/info/excludeに追記 # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ docker/default.conf ←追記 反映させる: $ git update-index --assume-unchanged docker/default.conf きっかけ: サーバ側だけdefault.confを変えたかったから。 詳細: ローカル環境のdefault.confは80番ポートのままで、サーバは常に443ポートにリダイレクトさせる為。 サーバのdefault.confはこれ server { server_name example.jp; listen 80; # 全てのリクエストをSSLサイトにリダイレクト location / { return 301 https://$host$request_uri; } } server { server_name example.jp; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.jp/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.jp/privkey.pem; root /var/www/html/public; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } ローカル環境のdefault.confはこれ server { listen 80; server_name localhost; root /var/www/html/public; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } 結果 サーバでdefault.confを変更してもgit pushしなくて良くなった!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

環境毎でGit管理したくないファイルを.git/info/excludeに追記する

環境毎でGit管理したくないファイルがある 管理したくない環境: サーバ側 $ ls -al . .. .git .gitignore README.md docker └default.conf ←管理したくないファイル docker-compose.yml src 方法: 各リポジトリの.git/info/excludeに追記 # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ docker/default.conf ←追記 反映させる: $ git update-index --assume-unchanged docker/default.conf きっかけ: サーバ側だけdefault.confを変えたかったから。 詳細: ローカル環境のdefault.confは80番ポートのままで、サーバは常に443ポートにリダイレクトさせる為。 サーバのdefault.confはこれ server { server_name example.jp; listen 80; # 全てのリクエストをSSLサイトにリダイレクト location / { return 301 https://$host$request_uri; } } server { server_name example.jp; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.jp/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.jp/privkey.pem; root /var/www/html/public; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } ローカル環境のdefault.confはこれ server { listen 80; server_name localhost; root /var/www/html/public; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; } 結果 サーバでdefault.confを変更してもgit pushしなくて良くなった!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dokku日本語ドキュメント

個人開発をしていて運用環境をかんたんに構築できるツールDokkuの日本語ドキュメントがありましたので、共有させていただきます。 ↓↓↓ Dokku日本語ドキュメント ↑↑↑
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerコンテナ上のPostgreSQLにデータベースを作成

はじめに DB からのデータ取得などの動作を含む簡単な Web アプリを試したいので、DB 環境の構築を行った。本記事では、環境を容易に作成・破棄できるよう Docker 上に PostgreSQL 環境を構築し、データベース・テーブルの作成、データの追加・確認を行う。実行環境は以下。 Windows 10 Pro (WSL2: Ubuntu-20.04) Docker: 20.10.7, build f0df350 psql: 12.8 psql のインストール まず PostgreSQL をコマンドで扱えるよう WSL2 環境に psql をインストールする。 $ sudo apt update $ sudo apt install postgresql $ psql --version # psql (PostgreSQL) 12.8 (Ubuntu 12.8-0ubuntu0.20.04.1) PostgreSQL 環境の構築 PostgreSQL を Docker 環境で日本語ロケールで動作させるを参考に PostgreSQL 環境を Docker コンテナ上に作成する。 まず適当なディレクトリを作成し、移動する。 $ mkdir postgresql $ cd postgresql このディレクトリ内に、Dockerfile、docker-compose.yml、.env の3つのファイルを作成していく。 Dockerfile の作成 Postgres 公式イメージが日本語ロケールで動作するよう、以下のような Dockerfile を作成する。 FROM postgres ARG DB_LANG=en_US RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8 ENV LANG $DB_LANG.utf8 docker-compose.yml の作成 次に、以下のように docker-compose.yml を作成する。build 内で指定されている args によって、日本語ロケールでビルドされる。 docker-compose.yml version: "3" services: db: build: context: . dockerfile: ./Dockerfile args: - DB_LANG=ja_JP container_name: "db" environment: - POSTGRES_USER - POSTGRES_PASSWORD ports: - "5432:5432" restart: always .env の作成 docker-compose.yml 内で環境変数に指定されている POSTGRES_USER と POSTGRES_PASSWORD を .env 内で指定する。 POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres Docker コンテナの起動 上記までで作成したファイルを元に、以下コマンドで Docker イメージをビルドし、コンテナを起動する。コンテナにアクセスし、.env で指定したユーザ名とパスワードでログインできる。 $ docker-compose up -d # イメージをビルドし、コンテナ起動 $ docker-compose exec db /bin/bash # コンテナにアクセス root:/# psql -U postgres Password for user postgres: postgres=# 以下コマンドでも同様の状態になる。 $ docker-compose up -d $ psql -h 127.0.0.1 -p 5432 -U postgres Password for user postgres: postgres=# データベースの作成 データベースを作成していく。ログイン状態で以下コマンドを実行。\l でデータベース一覧を確認すると、test_db が作成されていることが確認できる。また各テーブルのロケールが ja_JP.utf8 になっていることも確認できる。 postgres=# create database test_db; CREATE DATABASE postgres=# \l postgres | postgres | UTF8 | ja_JP.utf8 | ja_JP.utf8 | template0 | postgres | UTF8 | ja_JP.utf8 | ja_JP.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.utf8 | ja_JP.utf8 | =c/postgres + | | | | | postgres=CTc/postgres test_db | postgres | UTF8 | ja_JP.utf8 | ja_JP.utf8 | テーブルの作成 上記で作成した test_db にテーブルを追加する。ここでは user_id, name, age をカラムにもつ users テーブルを作成する。 postgres=# \d test_db; /* test_db データベースに接続 */ You are now connected to database "test_db" as user "postgres". test_db=# create table users test_db-# (user_id integer not null, test_db(# name character varying(50) not null, test_db(# age integer not null, test_db(# PRIMARY KEY(user_id)); CREATE TABLE test_db=# \d users /* users テーブルのスキーマを表示 */ Table "public.users" Column | Type | Collation | Nullable | Default ---------+-----------------------+-----------+----------+--------- user_id | integer | | not null | name | character varying(50) | | not null | age | integer | | not null | Indexes: "users_pkey" PRIMARY KEY, btree (user_id) データ登録 データを以下コマンドで入力する。日本語ロケールに対応しているかの確認もしたいので、name は漢字で登録したが、問題なく登録できていることが確認できる。 test_db=# insert into users /* データの登録 */ test_db-# (user_id, name, age) values test_db-# (1, '佐藤', 20), test_db-# (2, '鈴木', 30), test_db-# (3, '田中', 40); INSERT 0 3 test_db=# select * from users; user_id | name | age ---------+------+----- 1 | 佐藤 | 20 2 | 鈴木 | 30 3 | 田中 | 40 (3 rows) おわりに Docker コンテナ上で PostgreSQL 環境を構築し、動作の確認をすることができた。この DB に外部コンテナからアクセスすることも試したい。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WSL2でVPNをつないでいる状態だとDockerコンテナからGit pull/pushができない (wsl2 + docker環境構築手順書付)

はじめに おそらくこの記事を見ている方はこの記事衝撃的だったかと思います。 Docker "Desktop" の商用利用は250名以上の社員かつ$10M/yearの売り上げがある組織では有料サブスクリプションが必要になり、遅くとも来年2022年1月末までに契約が必要 とのことで、仕事でDocker Desktopを利用している方で何か別のに乗り換える必要がでてきた方も多いのではないかと思います。 私はWSL2(Ubuntu20.04)にDockerをインストールすることで、Docker Desktopから卒業することにしました。 以下の手順で環境構築を行いました。 しかし、会社で利用するとVPN接続が必須になり、WSL2のコンテナ上からGit pull/pushができなくなってしまいました。 こんな感じのエラーが出ます。(引用) 140.82.121.4 port 22: Connection timed out fatal: Could not read from remote repository. ということで、まずはこの問題の解決方法を紹介した後に環境構築手順も載せたいと思います。 解決方法 まず、WSLの起動時にresolv.confを再生成されないようにするを参考に、wsl2の設定をしていきます。 Ubuntu20.04を開きます。 まずはwsl.confを編集していきます。 $ sudo vi /etc/wsl.conf そして以下の内容を下に追加します。 [network] generateResolvConf = false そのあと、コマンドプロンプトを起動してUbuntu20.04を再起動させます。 $ wslconfig /t Ubuntu-20.04 再度Ubuntu20.04を起動して、resolv.confを編集します。 $ vi /etc/resolv.conf resolv.confのすでに書かれている内容をすべて消して、以下を追加します。 nameserver 8.8.8.8 再度、コマンドプロンプトでUbuntu20.04を再起動します。 $ wslconfig /t Ubuntu-20.04 ここまでできたら、次はdockerのネットワーク設定をします。 今回なぜVPNにつながらないかというと、VPNとコンテナ内のmtuが異なっているからです。 コンテナ内のmtu $ ip addr show dev eth0 | grep mtu 147: eth0@if148: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1200 VPNのmtu (コマンドプロンプトで実行) C:\Users\jinwa>netsh interface ipv4 show interfaces Idx Met MTU 状態 名前 --- ---------- ---------- ------------ --------------------------- 63 25 1400 connected VPNの名前 コマンドの参考はこちらからしました コンテナ内はmtuが1500に対して、VPNは1400でした。 ですので、mtuをコンテナ内で1400以下に設定する必要があります。 そこで、docker-compose.ymlの一番下にネットワーク設定を加えます。 docker-compose.yml (省略) networks: default: driver: bridge driver_opts: com.docker.network.driver.mtu: 1200 docker runを使っている場合はオプションでmtuを設定できます。 ちなみにこの設定は/etc/sysconfig/docker-networkに書いても大丈夫だそうです。 docker コンテナのMTUを変更する - Changing container MTU on docker ここまでできたら、docker-compose upをします。 docker-composeでポートが使われているというエラーがでたら、docker-compose downしてから試してみてください。 Portが衝突したときにこちらを参考にしました また、Docker Desktopが動いているとエラーになるので終了しているかも確かめましょう。 これでコンテナ上からVPNを経由してGitに接続できるようになりました。 WSL2のDocker環境構築手順 今後、会社で環境構築を教えるたびに調べるのは面倒なのでまとめておきます。 まず、Ubuntu20.04をインストールします。 Windowsの検索窓からMicrosoft Storeを調べて、クリックします。 Microsoft Storeのページが表示されたら検索窓から、Ubuntu 20.04 LTSを検索します。 そのあと、インストールをクリックします。 終わったら起動をクリックします。 画面が開きましたら、ユーザー名とパスワードの設定を行います。 なんでもよいですが、注意としては設定中にこの画面を閉じないようにしてください。 Rootユーザーが作成されてしまい、ユーザー作成ができなくなります。 ユーザー名(ここではwatanabejin) パスワードを同じの2回入力(表示されないので注意) できると以下のような出力があります。 1 update can be applied immediately. To see these additional updates run: apt list --upgradable The list of available updates is more than a week old. To check for new updates run: sudo apt update This message is shown once a day. To disable it please create the /home/watanabejin/.hushlogin file. watanabejin@jinwa:~$ 次にdockerをインストールします。 $ sudo apt-get update # ここでパスワードを求められるので先ほど設定したのを入力 # Dockerのインストール (安定板) $ curl https://get.docker.com | sh # しばらく待つ dockerがインストールできたか確認します。 $ docker version Client: Docker Engine - Community Version: 20.10.8 API version: 1.41 Go version: go1.16.6 Git commit: 3967b7d Built: Fri Jul 30 19:54:27 2021 OS/Arch: linux/amd64 Context: default Experimental: true Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 出力されていればOKです。今回は20.10.8が入りました。 そのあと、dockerデーモンを起動します。 $ sudo service docker start # * Starting Docker: dockerとでればOK $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 動いていることが確認できました。 いまの状態ですと、dockerコマンドを実行する際に常に先頭にsudoを付ける必要があるのでつけなくてもいいように設定します。 $ sudo gpasswd -a $USER docker そしてウィンドウを消してUbuntu20.04を再起動させます。 再度Ubuntu20.04を起動して、dockerデーモンを起動します。 $ sudo service docker start # パスワードを入力 そのあとで、先ほどのコマンドをsudoなしで行います。 $ docker ps 実行できれば成功です。 次にdocker-composeをインストールします。 インストールはここを参考にしました $ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose インストールできたかを確認します。 $ docker-compose --version docker-compose version 1.26.0, build d4451659 docker-compose 1.26.0が入っておりました。 この環境Ubuntu20.04を起動するたびにdockerデーモンを起動する必要があるためそこを起動時に実行するように設定します。 $ sudo vi .bashrc 以下の内容を下に追加します。 sudo service docker start そして、Ubuntuのウィンドウを消して、再度起動します。 すると最初にパスワードを求められます。.bashrcでsudoコマンドを使っているためです。 パスワードを入力して、* Starting Docker: dockerと表示されれば成功です。 Gitもいれますが、既に入っています。入っていない場合は以下のコマンドで入れます。 $ git version # 入っていれば表示される $ sudo apt-get install git # なければインストール Gitを使うたびにユーザー名やパスワードを入れたくないので設定しておきます。 $ git config --local user.email メールアドレス $ git config --local user.name ユーザー名 $ config --local user.password パスワード 私はコンテナの中でgitを使うため以下をコンテナ内で行っています。 $ git config --global user.email メールアドレス $ git config --global user.name ユーザー名 $ config --global user.password パスワード $ cat ./git/config # 設定されたかの確認 では、dockerのファイルを用意してdocker-compose upをしてみます。 まずは作業用ディレクトリを用意しました $ cd /home/Ubunt20.04のユーザー名/ # 私の場合cd /home/watanabejin/ $ mkdir workspace # workspaceディレクトリを作成 (名前は自由) $ cd workspace 作成したディレクトリ内で試しにPython環境を作ります。 ここからはVSCodeで行います。まず拡張機能からremote wslをインストールします。 そして左メニューのディスプレイマークからリモート...の横のドロップダウンリストでWSL Targetsを選択します。 そして、Ubuntu-20.04の横にあるディレクトリマークをクリックします。 すると別ウィンドウが開きます。これがUbuntu20.04の中になります。 先ほど作成したディレクトリを開きます。 ctrl + k + oで上にディレクトリが表示されるので、先ほど作成したディレクトリを選択してOKを押します。 ここからはいつものVSCodeの使い方になります。 試しにPythonのDocker環境を作ります。 こちらを参考に作ります 以下のファイルを作成します。 /workspace ┣ Dockerfile ┣ docker-compose.yml FROM python:3 USER root RUN apt-get update docker-compose.yml version: '3' services: python3: restart: always build: . container_name: 'python3' working_dir: '/root/' tty: true そして以下のコマンドでコンテナを起動します。 $ docker-compose build $ docker-compose up -d # コンテナに入る $ docker exec -it python3 bash これで環境構築終了です。 コンテナ内でVPN接続を使う場合は上を参考にここから設定してみてください。 おわりに 需要がありそうということで、最近乗り換えたときの内容をそのまま記事にしてみました。 VPNの接続はたまたまできたというかんじなので設定が正しいかは各自判断お願いします。 参考 WSLの起動時にresolv.confを再生成されないようにする using nord vpn connection - unable to clone and push repositories to github from wsl2 #6018 docker コンテナのMTUを変更する - Changing container MTU on docker VPN 接続時に WSL2 の SSH がハングアップした場合の解決方法 docker コンテナのMTUを変更する - Changing container MTU on docker 【Docker】Rails+MySQLの環境をDockerで構築中「ポートの衝突」に遭遇してから解決するまで dockerで簡易にpython3の環境を作ってみる WSL2 内の Ubuntu 20.04 で VPN をつないだときだけ ssh できない WSLからDocker Desktop for Windowsを使う 待ってました CUDA on WSL 2 Dockerコマンドをsudoなしで実行する方法 Ubuntu 20.04へのDocker Composeのインストールおよび使用方法 UbuntuにGitをインストールする 1.6 使い始める - 最初のGitの構成
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ

概要 記事 第一回 コンテナ Lambda の”いろは”、AWS CLI でのデプロイに挑戦 ! を参考に windows10 で AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ する方法を書きました AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ するには以下の3ステップが必要です 1.Docker イメージを作成する 2.Docker イメージを Amazon ECR リポジトリ にプッシュする 3.Lambda関数に Amazon ECR リポジトリ(の Docker イメージ) から ビルドする 前提条件 Docker Desktop がインストールされていること この記事は Windows10 上で Docker を用いて操作しています。 この記事の作業はローカル環境に Docker Desktop がインストールされていることを前提で進めます。インストールされていない場合は、インストールしてから進めてください。 Amazon CLI がインストールされていること Amazon CLI https://aws.amazon.com/jp/cli/ aws configure (初期化) が済んでいること > aws configure AWS Access Key ID [None]: ATI********CS AWS Secret Access Key [None]: ***erg***sdfg***bs1sderg** Default region name [None]: ap-northeast-1 Default output format [None]: json 実装 1.Docker イメージを作成する手順 手順1-1: 2つのテキストファイルを用意する 作業するフォルダを決めて 以下の2つのテキストファイルを作成しましょう それぞれのファイルの中身は以下の通りとします。 app.py import json def handler(event, context): return { "statusCode": 200, "body": json.dumps( { "message": "hello world", } ), } Dockerfile FROM public.ecr.aws/lambda/python:3.8 COPY app.py ./ CMD ["app.handler"] 解説 FROM 命令で public.ecr.aws/lambda/python:3.8 と ECR の AWS 公式の公開イメージを指定していますが、amazon/aws-lambda-python:3.8 のように docker hub のイメージを参照することも可能です。   COPY コマンドでローカルに配置されている Lambda 関数本体である app.py ファイルをイメージにコピーしています。そして CMD で Lambda 関数のハンドラーを渡しています。 手順1-2: Dockerfile 元にビルド Dockerfile を元にビルドしてみましょう。 コマンド docker build -t func1 . を実行します。 > docker build -t func1 . [+] Building 19.2s (7/7) FINISHED => [internal] load build definition from Dockerfile ・・・<中略>・・・ => => extracting sha256:d79191d95889cb243767819f51824443759d257388bb5ef05babed549d31a2c4 => [2/2] COPY app.py ./ => exporting to image => => naming to docker.io/library/func1 Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them ビルド成功しました 2.Docker イメージを Amazon ECR にプッシュする手順 手順2-1: Amazon ECR に今回作成する Lambda 関数のイメージ用のリポジトリを作成します。 さて、ここから Amazon ECR に今回作成する Lambda 関数のイメージ用のリポジトリを作成します。 Amazon ECR とは Elastic Container Registry の略で Dockerのコンテナイメージを保存しておくためのレジストリで、 Dockerコンテナイメージを保存・管理・デプロイが簡単に出来ます。 手順2-2: Docker に リポジトリの URI を含めたタグを付与します。 ECR 上にリポジトリが作成されたら、リポジトリの URI を含めたタグを付与します。 docker tag func1:latest ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com/func1:latest Docker Desktop の Images に追加されます。 手順2-3:リポジトリに push する前に、ECR にログインします。 > aws ecr get-login-password | docker login --username AWS --password-stdin ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com Login Succeeded 手順2-4:リポジトリに push リポジトリに push しましょう。 PS> docker push ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com/func1:latest The push refers to repository [${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com/func1] 29fe8a4ae381: Pushed 20b4eff3dd4d: Pushing 68.11MB/92.13MB 11284767d41d: Pushing 87.48MB/199.7MB d6fa53d6caa6: Pushed b09e76f63d5d: Pushed 0acabcf564c7: Pushed f2342b1247df: Pushing 125.9MB/294.9MB latest: digest: sha256:123*************************************789 push が完了すると、ダイジェストが発行されるので、覚えておく AWS コンソールで確認すると cocker イメージが Amaxon ECR リポジトリ にアップロードされたのが確認できる 3.Lambda関数に Amazon ECR リポジトリ(の Docker イメージ) から ビルドする手順 手順3-1: AWS Lambda ダッシュボードから 関数作成 ボタンをクリックする 手順3-2: コンテナイメージから作成 ここから、Lambda 関数をコンテナイメージを利用して作成していきますが、AWS Lambda のコンテナサポートで、—package-type を指定できるようになりました。 できました 今回の Lambda関数名 は, docker_test としました 手順3-3:作成された関数を実行確認 そしていよいよ実行することができます。作成された関数を実行してみましょう。 > aws lambda invoke --function-name docer_test output ; cat output 正常に返ってきました!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

業務で使うようになったコマンド集

最近よく使うコマンド達 ちょくちょく忘れるのでメモ git git pull --rebase rebaseするときに使う 単純なpullよりも履歴が綺麗になるらしい(実感はなし) https://kray.jp/blog/git-pull-rebase/ git submodle update --init --recursive 別管理してるgitリポジトリをupdateするために使う(DBとか) Docker docker-compose down コンテナを停止させる docker-compose up -d コンテナを起動させる -dオプションは、コンテナをバックグラウンドで起動し、実行し続けるために使う。 https://docs.docker.jp/compose/reference/up.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Github Issuesをキレイに外部公開するサービス「2go」作ってみた

はじめに 今回初めて個人開発で作ったサービスを公開します。今までも何回かトライしていたのですが、なかなか公開までに至らないうちに、なにか問題にぶちあたったり、時間がかかりすぎて情熱が冷めてしまったりしていたので、今回はまずはスモールスタートで公開して改善していくことを心がけました。大体今回の公開まで、開発を始めてから1ヶ月程度になります。毎日朝4時半に起きて、子どもたちが起きる7時過ぎまでを開発時間として取り組んできました。 どんな人向け? 自分で作っているサービスの開発ロードマップをユーザーに公開するために、都度ブログを書いたりするのも大変ですよね。もし、自分のサービスのソースコードをGithubで管理していたとして、Github Issuesを見せるとしてもGithubに馴染みのない人にとっては読みにくいですし、外に出すサービスであればあるほど、Githubのレポジトリは非公開になっていると思います。これをなんとかできないかなと思いました。 どんなサービス? まずはこちらを見てください。 https://2go.plus/nice2h/2go/roadmap このようにGithubのレポジトリ内のIssueをMilestone区切りにして、Githubに馴染みのない人にも見やすいロードマップサイトを公開するサービスです。もちろん、非公開のレポジトリを公開設定にすることなく、ロードマップだけを外部公開することができます。 Githubアカウントでログインすると、以下の設定画面になります。レポジトリを選択して、どのMilestoneを共有するかをチェックして保存します。すると、自動的にロードマップサイトのURLが生成されるので、こちらにアクセスすれば常に最新のロードマップを見ることができます。このURLをシェアすれば、多くの人にあなたのサービスのロードマップを簡単にキレイに公開できるわけです。 Milestoneを今まで使っていな方は、Milestoneを作成して、Issueを割り当てればロードマップを整理することができます。また、Labelを活用している方もいらっしゃると思いますので、Milestoneの中のLabelでIssueをフィルタすることもできます。これらを駆使することで、Bugは見せずにenhancementだけ表示するなどのことも可能です。 今後の予定としては、今はMilestone基点で表示しているところを、Labelベースで表示できるようにもしたいと思っています。その他は、まさに上記のURLを参考にしていただければ、いつも最新です。 どんな技術を使ってる? 企業での開発経験はないので、全て自己流です。書籍やWebサイトを中心に勉強して開発しながら学んできました。念の為、利用している技術は以下のとおりです。 - Laravel : APIとBlade(SSRはやってみたことあり) - Vue3 : フロントエンド(今回初挑戦) - Tailwindcss : デザイン(Bootstrapからの脱却) - Docker : これらの開発環境と、本番でもDocker利用(いずれ分割予定) - Cloud : Conoha VPS(インフラに時間を掛けたくなかった) 気になっていること(随時追加予定) 開発環境はLaravel sailを使いましたが、本番は自前でdocker-compose.ymlを使いました。このあたりのコンテナの構成をどのようにしているか気になりました(本番でもsail使う?) 本番環境にコードをpullしてからnpm run prodしてbuildが終わるまでにラグがあり、この間は使えない機能が出てしまったりするが、このあたりをみなさんはどのように工夫しているか? DBについては、どこまでレコードを暗号化するか。検索機能などとのトレードオフになると思われるが。。 # 今後は? 現在alphaフェーズですが、alphaとしてもう1段階リリースの予定があります。多くの人に使っていただき、Feedbackをいただきながら改善して、開発経験を増していきたいと思います。また、今回の個人開発は最初から海外も同様の問題を抱えていると思ったので、最初から英語圏も視野に入っており、今の所すべてのUIは英語にしています。以下の英語Twitterアカウントも作成して、情報発信していこうと思っています。 もちろん、日本語のTwitterは私の今まで通りのアカウントを利用していく予定です。 https://twitter.com/jnakajima1982 ぜひGithubアカウントでログインして試していただき、ご感想・ご指摘をいただければと思います!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker [RUNNING]

NETWORK作成 \$ docker network ls|/ NETWORK ID NAME DRIVER SCOPE fc84cb948f63 adopter bridge local 272d903a7614 bridge bridge local 7b0a43421749 eth0 bridge local be36cf9f3e5c eth1 bridge local 50bd08843c78 host host local a82d51b65b0d hostonly bridge local d5930b9bbe07 network1 bridge local be7b8928cb8a none null local Docker network connect --ip 10.10.36.122 ETH0 42544a0703855bcbe127ee59e7ac88cc37c987b820bdc374c1450e40531efff5 あ、これって直接ID指定するのではなさそう。ERRでした Error response from daemon: user specified IP address is supported only when connecting to networks with user configured subnets サブネットだけで指定? 本とかで見ると、下記のようになっていたりします。 docker network create --subnet 192.168.1.0/24 network1 ちょっと、ネットワーク周りの所は、今回アタッチすることができなかったので、 細かくはまた次回。 unknown flag: --subnet unknown flag: --subnets unknown flag: --subnetmask See 'docker network connect --help'. UNKNOWNなんて、回答されてしまいました。 CONTAINER作成 docker run -d --name container01 centos 651cd4cf37d717b70eb6d3bd3633a5ec5ab7de9876fa09e5125caac1b0b0674f docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 何も表示されないコマンドです。。 $ docker run -d --name container01 centos docker: Error response from daemon: Conflict. The container name "/container01" is already in use by container "651cd4cf37d717b70eb6d3bd3633a5ec5ab7de9876fa09e5125caac1b0b0674f". You have to remove (or rename) that container to be able to reuse that name. どうやらいつの間にか"CONTAINER01"がコンテナ作成されていた様子。 単独でコンテナクリエイトしたのは、 docker network connect multi-host-network container1 なので、0が抜けてしまっているから別のものだと思われます。 1は作ったけど、01は作っていません。次回もう少し深掘りしてみます。 gitに調査ログをまとめたいと思っています。 IP固定 docker network connect --ip 10.xx.00.XX eth0 "docker network connect" requires exactly 2 arguments. docker start "docker start" requires at least 1 argument. docker network create "docker network create" requires exactly 1 argument. これらのエラーは、単純にオプション指定(-it, -exec,)で解決できます と思いましたが、 そうではなかったですね。 $ docker commit "docker commit" requires at least 1 and at most 2 arguments. $ docker build "docker build" requires exactly 1 argument. 確かこれらはイメージの作成やスナップショットとかのコマンドだったと思うので、 また後日、バックアップの構築時に使用してみます。 IMAGE PULL ※やたらと何回も実行されてしまう。 CENTOS:latestをゲット。 centos latest 300e315adb2f 9 months ago 209MB docker images rm??とかで整理整頓します。 プライベートキーとパブリックキー Successfully generated and loaded private key. Corresponding public key available: /Users/a765432109807543/key01.pub network周り構築の為、これ必須ですかね。 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES def2725110bc centos:7 "/bin/bash" 31 seconds ago Up 30 seconds cont1 651cd4cf37d7 centos "/bin/bash" 6 minutes ago Exited (0) 5 minutes ago container01 42544a070385 300e315adb2f "/bin/bash" 11 minutes ago Created cranky_booth 50c8bd7ace0a 300e315adb2f "/bin/bash" 21 minutes ago Exited (0) 20 minutes ago loving_euclid 45bcb2c862e0 centos "--ip 192.168.10.4 -…" 31 minutes ago Created magical_archimedes 6d34ffc711e5 centos "--ip 192.168.10.4 -…" 32 minutes ago Created dreamy_lumiere 8437ed5dc2e3 centos "--ip 172.30.100.104…" 33 minutes ago Created funny_shamir 212d3929a8c2 centos "-ip 172.30.100.104 …" 33 minutes ago Created quirky_bartik 73ff523cc3c9 centos "-i 172.30.100.104 -…" 33 minutes ago Created nervous_shannon 5a8fe7a89713 centos "-i 172.30.100.104 -…" 34 minutes ago Created objective_ardinghelli 7c92b68bc1c5 centos "-ip 172.30.100.104 …" 34 minutes ago Created gracious_dhawan e2bcfe7fd233 centos "/bin/bash" 36 minutes ago Exited (0) 36 minutes ago youthful_solomon 65e8b0173598 centos "/bin/bash" 38 minutes ago Created zen_thompson 4194593a7c26 centos "/bin/bash" 39 minutes ago Exited (0) 39 minutes ago sharp_goldberg 50a516aa66b9 alpine/git "git clone https://g…" 43 minutes ago Exited (0) 43 minutes ago うーん。以前と同様、固定IP付与のところでしくりじまくっているのが分かります。あまり参考にならず申し訳ないです。 この後もしくは続きます。 docker exec def2725110bc run /bin/bash OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "run": executable file not found in $PATH: unknown docker exec -it centos bash Error: No such container: centos $ docker exec def2725110bc run /bin/bash $ docker exec def2725110bc run /bin/bash -it $ docker exec def2725110bc run /bin/bash -it sh $ docker exec def2725110bc run /bin/sh -it sh $ docker exec def2725110bc run /bin/sh -it OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "run": executable file not found in $PATH: unknown パスが通っていないということですね。上記の5パターンは全て同じMSG $ docker run centos7 Unable to find image 'centos7:latest' locally docker: Error response from daemon: pull access denied for centos7, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. イメージはあるけど、利用不可という状態のようです。 docker run --volume list "docker run" requires at least 1 argument. docker run --volumes-from list "docker run" requires at least 1 argument. docker run -t -i --privileged centos bash [root@789cfe5581f7 /]# 今回は、無事にセッションログインまで成功しましたが、 何回もリトライしたり、オワコンになったのかと勘繰ったりしつつ、 何度も諦めないことですよね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む