質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

87.49%

docker-compose 実行時 php:7.2.19-fpmコンテナ内でapt-get updateができない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,788
退会済みユーザー

退会済みユーザー

以下のようなPHPとpostgresおよびnginxのコンテナを作成する

docker-compose.ymlファイルを作成しています。

version: '3'

services:
  # Nginxサーバーの設定
  line-web-server:
    # デフォルトのnginxイメージを用いる
    image: nginx:latest
    # ports でポートフォワーディングを指定.
    ports:
        - "22280:80"
    volumes:
        - "./app-source:/var/www/html"
        - "./web-config:/etc/nginx/conf.d"

    # docker-compose時の起動コンテナ名
    container_name: line-web-server


  line-app-server:
      dns: 8.8.8.8
      build: "./app-docker-file"
      # ports でポートフォワーディングを指定.
      volumes:
          - "./app-source:/var/www/html"
      # docker-compose時の起動コンテナ名
      container_name: line-app-server

  # postgresマスターサーバー
  line-postgres-server:
    image: postgres:9.5
    environment:
      POSTGRES_USER: voter
      POSTGRES_DB: vote_system_db
      POSTGRES_PASSWORD: password
    restart: always
    ports:
      - "45432:5432"
    volumes:
      # 永続化のためのDocker volumeを指定する
      - "line_db:/var/lib/postgresql/data"
      - "./initdb:/docker-entrypoint-initdb.d"
    # docker-compose時の起動コンテナ名
    container_name: line-postgres-server


volumes:
  line_db:
    external: true

上記 docker-compose.ymlファイルを

docker-compose build --no-cache


で実行すると 以下のようなエラーが表示されます

 ---> Running in 99cd35a01be3
Removing intermediate container 99cd35a01be3
 ---> db6ccf021215
Step 3/9 : RUN apt-get update
 ---> Running in 891ade3e6454
Err:1 http://security.debian.org/debian-security buster/updates InRelease
  Temporary failure resolving 'security.debian.org'
Err:2 http://deb.debian.org/debian buster InRelease
  Temporary failure resolving 'deb.debian.org'
Err:3 http://deb.debian.org/debian buster-updates InRelease
  Temporary failure resolving 'deb.debian.org'
Reading package lists...
W: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease  Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease  Temporary failure resolving 'security.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/buster-updates/InRelease  Temporary failure resolving 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Removing intermediate container 891ade3e6454
 ---> ce8c52f90080
Step 4/9 : RUN apt-get install -y libpq-dev libjpeg-dev libpng-dev vim nodejs sendmail git libzip-dev unzip
 ---> Running in 5e818608a902
Reading package lists...
Building dependency tree...
Reading state information...
Package git is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Unable to locate package libpq-dev
E: Unable to locate package libjpeg-dev
E: Unable to locate package libpng-dev
E: Unable to locate package vim
E: Unable to locate package nodejs
E: Unable to locate package sendmail
E: Package 'git' has no installation candidate
E: Unable to locate package libzip-dev
E: Unable to locate package unzip
ERROR: Service 'line-app-server' failed to build: The command '/bin/sh -c apt-get install -y libpq-dev libjpeg-dev libpng-dev vim nodejs sendmail git libzip-dev unzip' returned a non-zero code:
 100

いろいろ、調査したところ、phpコンテナのDNS設定の不具合だという点が濃厚そうなのですが、

/etc/resolv.confを修正したりしても解決しませんでした。
例えば
nameserver 8.8.8.8を書き込むなど。

ただ

docker container create --name php-server -it --net host -p 8080:80 php:latest /bin/bash

上記の様に、--net hostというパラメータをつけて phpコンテナ単体で実行し
コンテナ内で apt-get updateすると問題なく apt-get update が実行されました。

docker-compose.ymlに  net: "host"という設定を追加してみたのですが、それでも
apt-get update できません。

どなたか解決方法がわかる方、ご存知のかたご教授くださると幸いです。

実行しているDockerfileは以下のとおりです

FROM php:7.2.19-fpm

# (1)
RUN apt-get update 
# (2)
RUN apt-get install -y libpq-dev libjpeg-dev libpng-dev vim nodejs sendmail git libzip-dev unzip
# (3)
RUN docker-php-ext-configure gd  --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
# (4)
RUN docker-php-ext-install gd opcache pdo_pgsql pdo_mysql


# git動作環境で 非SSLでも通信できるように設定
RUN git config --global http.sslVerify false
# Composerのインストール
COPY --from=composer /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html

検証処理(1)
上記の#(1)~#(4)のRUNコマンドをコメントアウトしてほぼコンテナイメージのままビルドして、dokcer container exec -it コンテナ名  /bin/bash でコンテナ内に入って
apt-get update してもエラーで帰ってきました。

検証処理(2)
ただ、docker-compose.ymlに
network_mode: "host"を追加した状態で
同じく
上記の#(1)~#(4)のRUNコマンドをコメントアウトしてほぼコンテナイメージのままビルドして、dokcer container exec -it コンテナ名  /bin/bash でコンテナ内に入って
apt-get update した場合はうまく updateがはしりました。
ただDockerfileにRUN apt-get updateを記述した場合は、同様にDNS関連のエラーのような ものが発生します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

docker run --net host

をdocker-composeで定義する場合は、network_modeになります
https://docs.docker.com/compose/compose-file/#network_mode

ただし、hostモードで実行するとセキュリティ的に問題がありますので、本番運用では推奨されていません。

コンテナ内の/etc/resolv.confを修正しても反映されませんので、サンプルコードのようにdocker-compose.ymlでdns:を指定するのでOKかと思います。
https://docs.docker.com/compose/compose-file/#dns

エラーが発生しているコンテナがどのイメージをベースにしているかがわかりませんが、クリーンのベースイメージでも同じなのかも確認してはいかがでしょうか?
また、dockerのdaemon.jsonにdnsを設定しても同じでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/13 00:20

    daemon.jsonの再起動とコンテナ再作成の結果次第ですが、docker-compose build 時に--no-cacheを加えてみるのはいかがでしょうか?

    キャッシュ関連でこんなのもありました。
    https://qiita.com/inductor/items/9ddcf89f271f1fd9f5c5

    キャンセル

  • 2020/05/13 10:33

    返答がおそくなりました。

    結果的に、問題は解消しました‥。
    ホスト側OSのcentos7をrebootして、あらためて、docker-compose build --no-cacheを実行したところ動作しました。

    ホスト側OSを再起動した場合、

    docker-compose.ymlにはdns: もnetwork_mode: の記述もなくて
    問題なく動作しました。
    当方 KAGOYA VPSのCENTOS7で動作させておりますが、
    これが他のVPSでもrebootで問題が解消するのか、KAGOYA VPSの環境だけなのかはわかりませんが、、、

    キャンセル

  • 2020/05/13 10:43

    解決できてよかったです。
    おそらく--no-cacheが効いたじゃないかと思います。

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る