# Starting Prolog http server trough docker

**URL:** <https://swi-prolog.discourse.group/t/starting-prolog-http-server-trough-docker/1537>\
**Category:** Help!\
**Tags:** how-to\
**Created:** [November 26, 2019, 1:43pm UTC](https://swi-prolog.discourse.group/t/starting-prolog-http-server-trough-docker/1537 "2019-11-26T13:43:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![oskarstreimanis](https://avatars.discourse-cdn.com/v4/letter/o/b5a626/32.png) [@oskarstreimanis](https://swi-prolog.discourse.group/u/oskarstreimanis)\
**Post date:** [November 26, 2019, 1:43pm UTC](https://swi-prolog.discourse.group/t/starting-prolog-http-server-trough-docker/1537/1 "2019-11-26T13:43:45Z")

</div>

I’m using: SWI-Prolog version 64 bits, version 8.1.16-22

I want to deploy my Prolog http server as a docker container. I have created a main.pl script, which loads all dependencies and predicates and starts prolog http server. When I do it locally it works fine. When I am trying to do it trough docker, it starts and it loads everything successfully, but when it runs trough all the lines it just exits with code(0), I was wondering is there a proper way to start a prolog script from terminal? So it would not exit when it runs trough code?

```prolog
:- set_setting(http:cors, [*]).
server(Port) :-
	get_base_location_atom(Base),
	atom_concat(Base, '/cert/server.pem', Server),
	atom_concat(Base, '/cert/private_key.pem', PrivateKey),
    http_server(http_dispatch,
                        [ port(Port),
                      ssl([ certificate_file(Server),
                            key_file(PrivateKey),
                            password("XXXXXXXXXXXX"),
                            peer_cert(false)
                          ])
                    ]).

```

```prolog
CMD ["/root/bin/swipl", "main.pl"]

```

---

<div class="post-metadata">

**Author:** ![oskarstreimanis](https://avatars.discourse-cdn.com/v4/letter/o/b5a626/32.png) [@oskarstreimanis](https://swi-prolog.discourse.group/u/oskarstreimanis)\
**Post date:** [November 27, 2019, 6:25am UTC](https://swi-prolog.discourse.group/t/starting-prolog-http-server-trough-docker/1537/2 "2019-11-27T06:25:24Z")

</div>

Added infinite loop with sleep, that solved the issue for now.

Later will look into how this script can be run as a daemon.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [November 27, 2019, 8:50am UTC](https://swi-prolog.discourse.group/t/starting-prolog-http-server-trough-docker/1537/3 "2019-11-27T08:50:15Z")

</div>

That is a solution. I typically use thread\_get\_message/1 to block. That also allows you to send something to this queue and make the main thread do something (or stop).

---

<div class="post-metadata">

**Author:** ![matteoredaelli](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/matteoredaelli/32/948_2.png) [@matteoredaelli](https://swi-prolog.discourse.group/u/matteoredaelli)\
**Post date:** [December 12, 2019, 9:57pm UTC](https://swi-prolog.discourse.group/t/starting-prolog-http-server-trough-docker/1537/4 "2019-12-12T21:57:21Z")

</div>

I found

ENTRYPOINT [“swipl”]  
CMD ["/app/server.pl", “–user=daemon”, “–fork=false”, “–port=8888”]

Please check

[https://gitlab.com/matteo.redaelli/prolog-http-server-docker](https://gitlab.com/matteo.redaelli/prolog-http-server-docker)
