カテゴリー: docker

  • Docker: E: Unable to locate package

    Docker: E: Unable to locate package

    はじめに

    サクッと環境を構築するのに、最初にapt-get updateを省略してしまったがために、ハマってしまった。今後同じ過ちを繰り返さない為にまとめ。

    実施したDockerfile

    実にシンプル。

    ubuntuを持ってきて、wgetとnodejsとnpmでも入れて動かそうと思った。いろんなサンプルファイルではしっかりとapt-get updateの記載があったが、あえて外した。そして結果的に時間を要した。

    実施したDockerfileはこちら

    #利用するUbuntuのイメージ
    FROM ubuntu:16.04
    
    # wgetをインストール
    RUN apt-get install -y wget 
    RUN apt-get install -y nodejs 
    RUN apt-get install -y npm

    docker buildコマンド

    $ docker build -t ubuntuuuu .
    Sending build context to Docker daemon   4.57GB
    Step 1/4 : FROM ubuntu:16.04
     ---> 7aa3602ab41e
    Step 2/4 : RUN apt-get install -y wget
     ---> Running in 30312e88bc87
    Reading package lists...
    Building dependency tree...
    Reading state information...
    E: Unable to locate package wget
    The command '/bin/sh -c apt-get install -y wget' returned a non-zero code: 100
    $ 

    E: Unable to locate package

    まずネットワーク周りを疑ったが、異常はなさそうだった。

    対処

    諸々installする処理の前にapt-get updateを入れたのみ。

    #利用するUbuntuのイメージ
    FROM ubuntu:16.04
    
    # wgetをインストール
    RUN apt-get update # 追加
    RUN apt-get install -y wget 
    RUN apt-get install -y nodejs 
    RUN apt-get install -y npm

    build結果

    $ docker build -t ubuntuuuu .
    Sending build context to Docker daemon   4.57GB
    Step 1/5 : FROM ubuntu:16.04
     ---> 7aa3602ab41e
    Step 2/5 : RUN apt-get update
     ---> Running in f929ef07a958
    Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
    Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
    
    (略)
    
    Removing intermediate container fc51f9cd4a4f
     ---> 3e9f68c18e10
    Successfully built 3e9f68c18e10
    Successfully tagged ubuntuuuu:latest
    $ 

     

    無事Successfullyになった。

    なぜapt-get updateが無いと失敗するのか

    憶測に過ぎないが、おそらくコンテナ版ubuntuを使わせる上で、必ず最新版のパッケージでないと使わせないというubuntu側(?)の意向のように感じる

    所感

    昨年発売され賑わっているAirPods ProだがAmazonでも販売を開始するようになり、Amazonでは今はポイントもつくようになっているようだ。自分は仕事しながら音楽聞かないが、ノイズキャンセルは気になる。

  • denied: requested access to the resource is denied

    denied: requested access to the resource is denied

    docker hubのようなレジストリサービスを使った際、

    # docker push [remote repository]:[tag] 
    The push refers to a repository [xxxxx ]
    0b42c4d54897: Preparing 
    9cc8bf7662b6: Preparing 
    0b9ee6a3e512: Preparing 
    129b697f70e9: Preparing 
    denied: requested access to the resource is denied
    

    というエラーが表示された。

    これは単純な問題で、リポジトリやタグの指定が誤った際に表示される

     

    # レジストリサービスにログインする
    docker login
    
    # commitする(コンテナからimage化)
    docker commit [image名] [remote repository]:[tag]
    例: docker commit container git.example.com/infra/admin:20180717
    
    # リモートリポジトリへpush
    docker push [remote repository]:[tag]
    例: docker push git.example.com/infra/admin:20180717
    

     

    よくある間違いがプロジェクト名の誤り。docker imagesコマンドで名前が合っているか確認し、修正することでエラーは解消される。

  • docker loginは鍵認証できなそう

    docker loginは鍵認証できなそう

    はじめに

    ログインするには大きく二つ

    • パスワード認証
    • 鍵認証

    が定番だと思うが、残念ながらdocker hubなどレジストリへ登録するのに鍵認証は使えなさそうだ

    公式ドキュメント

    https://docs.docker.com/engine/reference/commandline/login/

    Name, shorthand Description
    --password , -p Password
    --password-stdin Take the password from stdin
    --username , -u Username

    パスワードを聞かれないようにするためには

    公式ドキュメントにあるように、テキストファイルに書き、標準出力で読み込ませるしかなさそう。

    $ cat ~/my_password.txt | docker login --username foo --password-stdin

    平文でパスワードを書くのは抵抗あるが、パーミッションを絞って、うまく調整するしかなさそう。痒い所に手が届かないのが残念。