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

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

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

apt-get

apt-getコマンドはUNIX系OSのパッケージのインストールなど、パッケージ管理を行うためのコマンドです。

Docker

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

Q&A

解決済

1回答

4783閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

apt-get

apt-getコマンドはUNIX系OSのパッケージのインストールなど、パッケージ管理を行うためのコマンドです。

Docker

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

0グッド

0クリップ

投稿2020/05/12 09:47

編集2020/05/12 13:41

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

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

yml

1 2version: '3' 3 4services: 5 # Nginxサーバーの設定 6 line-web-server: 7 # デフォルトのnginxイメージを用いる 8 image: nginx:latest 9 # ports でポートフォワーディングを指定. 10 ports: 11 - "22280:80" 12 volumes: 13 - "./app-source:/var/www/html" 14 - "./web-config:/etc/nginx/conf.d" 15 16 # docker-compose時の起動コンテナ名 17 container_name: line-web-server 18 19 20 line-app-server: 21 dns: 8.8.8.8 22 build: "./app-docker-file" 23 # ports でポートフォワーディングを指定. 24 volumes: 25 - "./app-source:/var/www/html" 26 # docker-compose時の起動コンテナ名 27 container_name: line-app-server 28 29 # postgresマスターサーバー 30 line-postgres-server: 31 image: postgres:9.5 32 environment: 33 POSTGRES_USER: voter 34 POSTGRES_DB: vote_system_db 35 POSTGRES_PASSWORD: password 36 restart: always 37 ports: 38 - "45432:5432" 39 volumes: 40 # 永続化のためのDocker volumeを指定する 41 - "line_db:/var/lib/postgresql/data" 42 - "./initdb:/docker-entrypoint-initdb.d" 43 # docker-compose時の起動コンテナ名 44 container_name: line-postgres-server 45 46 47volumes: 48 line_db: 49 external: true 50

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

ini

1docker-compose build --no-cache

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

ini

1 2 ---> Running in 99cd35a01be3 3Removing intermediate container 99cd35a01be3 4 ---> db6ccf021215 5Step 3/9 : RUN apt-get update 6 ---> Running in 891ade3e6454 7Err:1 http://security.debian.org/debian-security buster/updates InRelease 8 Temporary failure resolving 'security.debian.org' 9Err:2 http://deb.debian.org/debian buster InRelease 10 Temporary failure resolving 'deb.debian.org' 11Err:3 http://deb.debian.org/debian buster-updates InRelease 12 Temporary failure resolving 'deb.debian.org' 13Reading package lists... 14W: Failed to fetch http://deb.debian.org/debian/dists/buster/InRelease Temporary failure resolving 'deb.debian.org' 15W: Failed to fetch http://security.debian.org/debian-security/dists/buster/updates/InRelease Temporary failure resolving 'security.debian.org' 16W: Failed to fetch http://deb.debian.org/debian/dists/buster-updates/InRelease Temporary failure resolving 'deb.debian.org' 17W: Some index files failed to download. They have been ignored, or old ones used instead. 18Removing intermediate container 891ade3e6454 19 ---> ce8c52f90080 20Step 4/9 : RUN apt-get install -y libpq-dev libjpeg-dev libpng-dev vim nodejs sendmail git libzip-dev unzip 21 ---> Running in 5e818608a902 22Reading package lists... 23Building dependency tree... 24Reading state information... 25Package git is not available, but is referred to by another package. 26This may mean that the package is missing, has been obsoleted, or 27is only available from another source 28 29E: Unable to locate package libpq-dev 30E: Unable to locate package libjpeg-dev 31E: Unable to locate package libpng-dev 32E: Unable to locate package vim 33E: Unable to locate package nodejs 34E: Unable to locate package sendmail 35E: Package 'git' has no installation candidate 36E: Unable to locate package libzip-dev 37E: Unable to locate package unzip 38ERROR: 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: 39 100

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

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

ただ

ini

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

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

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

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

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

ini

1 2FROM php:7.2.19-fpm 3 4# (1) 5RUN apt-get update 6# (2) 7RUN apt-get install -y libpq-dev libjpeg-dev libpng-dev vim nodejs sendmail git libzip-dev unzip 8# (3) 9RUN docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ 10# (4) 11RUN docker-php-ext-install gd opcache pdo_pgsql pdo_mysql 12 13 14# git動作環境で 非SSLでも通信できるように設定 15RUN git config --global http.sslVerify false 16# Composerのインストール 17COPY --from=composer /usr/bin/composer /usr/bin/composer 18 19WORKDIR /var/www/html 20

検証処理(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関連のエラーのような ものが発生します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

shell

1docker 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/12 10:15

編集2020/05/12 10:17
comefigo

総合スコア1051

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

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

退会済みユーザー

退会済みユーザー

2020/05/12 13:45

ホスト側に /etc/docker/daemon.jsonに ホスト側 /etc/resolv.confの記述と同じnameserverを 以下の様に記述して { dns: [ "210.134.55.219", "210.134.48.31", "8.8.8.8" ] } もだめでした‥。
退会済みユーザー

退会済みユーザー

2020/05/12 13:49

ちなみに、質問のdocker-compose.yml と Dockerfileをつかって ローカルのwindows 10上だと問題なく動作するのです。
comefigo

2020/05/12 13:49

ちなみにdocker-composeに"network_mode": "host"の動作はいかがでしたか? クリーンのベースイメージでも試されましたでしょうか? dockerのバージョンとホストのOSやバージョンはなにでしょうか?
退会済みユーザー

退会済みユーザー

2020/05/12 13:53

docker-composeに"network_mode": "host"を追加した場合、 Dockerfileに RUN apt-get updateを記述したままでは動作しなかったのですが、 RUN apt-get updateをコメントアウトし、 docker-compose up -d でコンテナ起動後、 docker container exec -it line-app-server /bin/bash でコンテナに入り、 apt-get updateコマンドを実行するとうまく動作しました!
退会済みユーザー

退会済みユーザー

2020/05/12 13:59 編集

ホストのバージョン CentOS Linux release 7.8.2003 (Core) Dockerのバージョン Docker version 19.03.8, build afacb8b docker-compose は docker-compose version 1.25.3, build d4d1b42b となってますね。
comefigo

2020/05/12 14:02

ちょうど返信が前後したようですね。 docker-compose buildの時はnetworkがhostモードになっていないかもしれないですね。 過去にこのようなケースもあるようですね。 https://teratail.com/questions/201800
comefigo

2020/05/12 14:03

ホストがCentOSだったんですね。 SELinuxは有効でしょうか?あとファイアウォールは有効でしょうか?
comefigo

2020/05/12 14:05

ちなみにdaemon.jsonを更新された後は、Dockerサービスを再起動、コンテナの再作成(一度docker-compose down)はされましたでしょうか?
退会済みユーザー

退会済みユーザー

2020/05/12 14:10

selinuxは SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: permissive Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28 一応Permissiveにはしています。 daemon.jsonを編集後再起動してなかったです!ちょっとためしてみます!
退会済みユーザー

退会済みユーザー

2020/05/12 14:11

ファイヤーウオールは動いている状態ですね。
退会済みユーザー

退会済みユーザー

2020/05/13 01:33

返答がおそくなりました。 結果的に、問題は解消しました‥。 ホスト側OSのcentos7をrebootして、あらためて、docker-compose build --no-cacheを実行したところ動作しました。 ホスト側OSを再起動した場合、 docker-compose.ymlにはdns: もnetwork_mode: の記述もなくて 問題なく動作しました。 当方 KAGOYA VPSのCENTOS7で動作させておりますが、 これが他のVPSでもrebootで問題が解消するのか、KAGOYA VPSの環境だけなのかはわかりませんが、、、
comefigo

2020/05/13 01:43

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問