taro373
@taro373

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

docker-composeにhttps-portalを組み込む時のportsとDOMAINSの書き方

docker-composeで起動しているnginxに、https-portalを使ってhttps化するには、portsとDOMAINSはどのように記述すればよいでしょうか。
まず、DOckerでnginxを起動する部分として、下記のdocker-compose.ymlを作成し、

version: '3.7'

  nginx:
    image: nginx
    ports:
      - 18080:80
    volumes:
     - /home/hoge/wkDocker-compose:/usr/share/nginx/html 

docker-composeコマンドでコンテナを起動し

[hoge wkDocker-compose]$ docker-compose up -d 
Creating wkdocker-compose_nginx_1 ... done

/etc/hostsに追記して、ブラウザでアクセスすると、

[hoge wkDocker-compose]$ grep test /etc/hosts
127.0.0.1 test.nginx.com
[hoge wkDocker-compose]$ firefox localhost:18080/helllo.html
[hoge wkDocker-compose]$ firefox http://test.nginx.com:18080/helllo.html

指定したhtmlファイル、helllo.htmlが表示されました。

スクリーンショット 2022-11-14 15.24.06.png

この状態のdocker-compose.ymlにhttps-portalを追加してhttps化しようとしています。
https-portalを組み込む時のportsとDOMAINSの指定は何を書けば良いのでしょうか?

こちらの記事(Qiita「https-portalで簡単https対応!」)を参考に、下記の記述を追加してみました。

version: '3.7'

services:
  https:
    image: steveltn/https-portal:1
    ports:
      - "80:80"
      - "443:443"
    environment:
      DOMAINS: test.nginx.com -> http://nginx:18080
      STAGE: local

  nginx:
    image: nginx
    ports:
      - 18080:18080      
    volumes:
     - /home/tuti/wkDocker-compose:/usr/share/nginx/html

これでコンテナを起動すると、「port is already allocated」のエラーになってしまいました。

[hoge wkDocker-compose]$ docker-compose up -d 
Creating wkdocker-compose_https_1 ... 
Creating wkdocker-compose_https_1 ... error
WARNING: Host is already in use by another container

ERROR: for wkdocker-compose_https_1  Cannot start service https: driver failed programming external connectivity on endpoint wkdocker-compose_https_1 (7ac4968f12f5a0d9f6839de53a210b3d8857bb24b92b826c2e82fd4ae860f22e): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in usCreating wkdocker-compose_nginx_1 ... done

ERROR: for https  Cannot start service https: driver failed programming external connectivity on endpoint wkdocker-compose_https_1 (7ac4968f12f5a0d9f6839de53a210b3d8857bb24b92b826c2e82fd4ae860f22e): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
ERROR: Encountered errors while bringing up the project.
0

2Answer

こちら「Dockerでコンテナ内のプロセスからホストのプロセスに接続する方法」を参考にしました
https://qiita.com/silane1001/items/973f32e05defe254408c
これで、https化ができています

version: '3.7'

services:

services:
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - '3443:443'
    environment:
      STAGE: local
      DOMAINS: 'localhost -> http://host.docker.internal:18080'
    extra_hosts:
      - "host.docker.internal:host-gateway"

  nginx:
    image: nginx
    ports:
      - 18080:80
    volumes:
     - /work/wkDocker-compose:/usr/share/nginx/html 
    ```
1Like
WARNING: Host is already in use by another container

私はdocker-composeを使わずdockerコマンドで1行1行実行しています。不思議なことにdocker-composeが自然に読めるようになりました。
恐らく、前回の残骸が邪魔しているのでは?

docker ps -a
docker container list -a

で確認し、docker stop , docker rmでしょうか?

尚、環境変数にハイフンとイコールがないです。

environment:
  - DOMAINS=xxxxxxxxx

yaml書式の構文エラーはないですが、
DOMAINS: と言うdocker-composeの未登録の定義名として認識されて環境変数が未設定です。

ports: 18080:80

の80番はコンテナ内のアプリのデホルトport ですので、変更したい場合はコンテナ内のconfを書き換える必要があります。

0Like

Comments

Your answer might help someone💌