LoginSignup
0
0

More than 1 year has passed since last update.

Remote ContainerのlocalhostへのアクセスがERR_EMPTY_RESPONSEを返す

Last updated at Posted at 2020-12-29

VSCodeのRemote Containerでphp-apacheイメージを利用したところ、localhostへのアクセスがERR_EMPTY_RESPONSEを返しました。ポートなどの設定も見直しました(docker上のアプリにlocalhostでアクセスしたらERR_EMPTY_RESPONSEが出る)が問題がなく悩みました。

環境

  • Windows10 WSL(Ubuntu 20.04)
  • Docker Desktop for Windows
  • VSCode 1.52.1(Nov 2020)

原因

Apacheのサービスが起動していませんでした。
コンテナ内で下記コマンドによりサービスの起動を確認したところ、apache2が起動していないことが分かります。

$ service --status-all
 [ - ]  apache-htcacheclean
 [ - ]  apache2
 [ ? ]  hwclock.sh
 [ - ]  procps

WSLからdocker runした場合は自動的に起動していたので、Remote Containerでも起動しているものだと思っていました。

解決法

devcontainer.jsonでコンテナ起動後にデフォルトのコマンド(Apacheの起動コマンド)が実行されるように指定する必要があります。

devcontainer.json
{
    "build": {
        "dockerfile": "Dockerfile"
    },
    "mounts": [
        "source=${localWorkspaceFolder}/public,target=/var/www/html,type=bind,consistency=cached"
    ],
    "forwardPorts": [80],
+   "overrideCommand": false
}

overrideCommandはデフォルトではtrueであり、コンテナ既定のコマンドの代わりに/bin/sh -c "while sleep 1000; do :; done"を実行するとされています(devcontainer.json reference)。これをfalseにすることでコンテナ既定のコマンドが起動時に実行されるようになります。

上記はDockerfileを利用した構成ですが、Docker Composeの場合は必須のserviceプロパティがあるのでそれが利用できます。
ちなみに、Dockerfileは下記のようになります。

FROM php:7.4.7-apache

EXPOSE 80

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
      git \
      vim \
      unzip \
      libonig-dev \
      libzip-dev \
      libfreetype6-dev \
      libjpeg62-turbo-dev \
      libpng-dev \
      libwebp-dev && \
    docker-php-ext-configure gd --with-jpeg --with-webp --with-freetype && \
    docker-php-ext-install -j$(nproc) \
      mbstring \
      zip \
      gd \
      exif && \
    # reduce image size
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY --from=composer /usr/bin/composer /usr/bin/composer

COPY --from=node /usr/local/bin/ /usr/local/bin/
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules

RUN a2enmod rewrite headers

補足

overrideCommandを変更する以外の方法として、明示的にApacheを起動するコマンドを指定することもできます。この場合はdevcontainer.json

"postStartCommand": "service apache2 start"

を追加します。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0