flask with docker returning 404 on all routes except root












0















I have been investigating related questions but could not find a correct solution to this issue. All of my routes work locally. However, when I run docker-compose up to containerize my app, my app will start but all routes except for the root "hello world" route returns a 404 error.



I've attempted setting "SERVER_NAME" in app.config and appending an extra "/" on my route urls like other posts have suggested but to no avail.



Any suggestions on how to fix this?



app/app.py



@app.route("/")                        # <-- this route works
def hello_world():
return "Hello, world!"

@app.route("/test", methods=["POST"]) # <-- this one doesn't
def test():
return "Test POST route"

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)


Dockerfile:



FROM tiangolo/uwsgi-nginx-flask:python3.6

COPY requirements.txt /

WORKDIR /

RUN pip install -r ./requirements.txt --no-cache-dir

COPY app/ /app/

WORKDIR /app

ENV FLASK_APP=app.py
ENV FLASK_ENV=production
CMD flask db upgrade && python app.py


docker-compose.yml



version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env









share|improve this question

























  • I notice that you have an extra "." in the host. It should be host="0.0.0.0", not sure if that causes any issues.

    – kstullich
    Nov 21 '18 at 5:06











  • Edited. This was a typo but it does not solve the error.

    – Brandon Fujii
    Nov 21 '18 at 5:49











  • How did you verify that /test route did not work? Could you provide Docker logs?

    – Alex
    Nov 21 '18 at 6:43








  • 1





    Make sure that you send POST request to verify that your /test route works.

    – Alex
    Nov 21 '18 at 7:10


















0















I have been investigating related questions but could not find a correct solution to this issue. All of my routes work locally. However, when I run docker-compose up to containerize my app, my app will start but all routes except for the root "hello world" route returns a 404 error.



I've attempted setting "SERVER_NAME" in app.config and appending an extra "/" on my route urls like other posts have suggested but to no avail.



Any suggestions on how to fix this?



app/app.py



@app.route("/")                        # <-- this route works
def hello_world():
return "Hello, world!"

@app.route("/test", methods=["POST"]) # <-- this one doesn't
def test():
return "Test POST route"

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)


Dockerfile:



FROM tiangolo/uwsgi-nginx-flask:python3.6

COPY requirements.txt /

WORKDIR /

RUN pip install -r ./requirements.txt --no-cache-dir

COPY app/ /app/

WORKDIR /app

ENV FLASK_APP=app.py
ENV FLASK_ENV=production
CMD flask db upgrade && python app.py


docker-compose.yml



version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env









share|improve this question

























  • I notice that you have an extra "." in the host. It should be host="0.0.0.0", not sure if that causes any issues.

    – kstullich
    Nov 21 '18 at 5:06











  • Edited. This was a typo but it does not solve the error.

    – Brandon Fujii
    Nov 21 '18 at 5:49











  • How did you verify that /test route did not work? Could you provide Docker logs?

    – Alex
    Nov 21 '18 at 6:43








  • 1





    Make sure that you send POST request to verify that your /test route works.

    – Alex
    Nov 21 '18 at 7:10
















0












0








0








I have been investigating related questions but could not find a correct solution to this issue. All of my routes work locally. However, when I run docker-compose up to containerize my app, my app will start but all routes except for the root "hello world" route returns a 404 error.



I've attempted setting "SERVER_NAME" in app.config and appending an extra "/" on my route urls like other posts have suggested but to no avail.



Any suggestions on how to fix this?



app/app.py



@app.route("/")                        # <-- this route works
def hello_world():
return "Hello, world!"

@app.route("/test", methods=["POST"]) # <-- this one doesn't
def test():
return "Test POST route"

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)


Dockerfile:



FROM tiangolo/uwsgi-nginx-flask:python3.6

COPY requirements.txt /

WORKDIR /

RUN pip install -r ./requirements.txt --no-cache-dir

COPY app/ /app/

WORKDIR /app

ENV FLASK_APP=app.py
ENV FLASK_ENV=production
CMD flask db upgrade && python app.py


docker-compose.yml



version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env









share|improve this question
















I have been investigating related questions but could not find a correct solution to this issue. All of my routes work locally. However, when I run docker-compose up to containerize my app, my app will start but all routes except for the root "hello world" route returns a 404 error.



I've attempted setting "SERVER_NAME" in app.config and appending an extra "/" on my route urls like other posts have suggested but to no avail.



Any suggestions on how to fix this?



app/app.py



@app.route("/")                        # <-- this route works
def hello_world():
return "Hello, world!"

@app.route("/test", methods=["POST"]) # <-- this one doesn't
def test():
return "Test POST route"

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)


Dockerfile:



FROM tiangolo/uwsgi-nginx-flask:python3.6

COPY requirements.txt /

WORKDIR /

RUN pip install -r ./requirements.txt --no-cache-dir

COPY app/ /app/

WORKDIR /app

ENV FLASK_APP=app.py
ENV FLASK_ENV=production
CMD flask db upgrade && python app.py


docker-compose.yml



version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env






python python-3.x docker flask docker-compose






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 21 '18 at 5:49







Brandon Fujii

















asked Nov 21 '18 at 4:49









Brandon FujiiBrandon Fujii

11




11













  • I notice that you have an extra "." in the host. It should be host="0.0.0.0", not sure if that causes any issues.

    – kstullich
    Nov 21 '18 at 5:06











  • Edited. This was a typo but it does not solve the error.

    – Brandon Fujii
    Nov 21 '18 at 5:49











  • How did you verify that /test route did not work? Could you provide Docker logs?

    – Alex
    Nov 21 '18 at 6:43








  • 1





    Make sure that you send POST request to verify that your /test route works.

    – Alex
    Nov 21 '18 at 7:10





















  • I notice that you have an extra "." in the host. It should be host="0.0.0.0", not sure if that causes any issues.

    – kstullich
    Nov 21 '18 at 5:06











  • Edited. This was a typo but it does not solve the error.

    – Brandon Fujii
    Nov 21 '18 at 5:49











  • How did you verify that /test route did not work? Could you provide Docker logs?

    – Alex
    Nov 21 '18 at 6:43








  • 1





    Make sure that you send POST request to verify that your /test route works.

    – Alex
    Nov 21 '18 at 7:10



















I notice that you have an extra "." in the host. It should be host="0.0.0.0", not sure if that causes any issues.

– kstullich
Nov 21 '18 at 5:06





I notice that you have an extra "." in the host. It should be host="0.0.0.0", not sure if that causes any issues.

– kstullich
Nov 21 '18 at 5:06













Edited. This was a typo but it does not solve the error.

– Brandon Fujii
Nov 21 '18 at 5:49





Edited. This was a typo but it does not solve the error.

– Brandon Fujii
Nov 21 '18 at 5:49













How did you verify that /test route did not work? Could you provide Docker logs?

– Alex
Nov 21 '18 at 6:43







How did you verify that /test route did not work? Could you provide Docker logs?

– Alex
Nov 21 '18 at 6:43






1




1





Make sure that you send POST request to verify that your /test route works.

– Alex
Nov 21 '18 at 7:10







Make sure that you send POST request to verify that your /test route works.

– Alex
Nov 21 '18 at 7:10














1 Answer
1






active

oldest

votes


















0














You need to mount the source code folder in the docker compose rather than the dockerfile, otherwise you need to rebuild the image every time the code changes. In docker compose you can use volumes property to do this. You can read more here https://docs.docker.com/compose/compose-file/



Example




version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env
volumes:
- ./app:/app





share|improve this answer


























  • Mounting source code will not resolve the problem and completely unrelated.

    – Alex
    Nov 21 '18 at 7:20











  • If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

    – Andrei Dumitrescu-Tudor
    Nov 21 '18 at 7:21













  • Did not even think about it but could be possible.

    – Alex
    Nov 21 '18 at 7:43











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53405430%2fflask-with-docker-returning-404-on-all-routes-except-root%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














You need to mount the source code folder in the docker compose rather than the dockerfile, otherwise you need to rebuild the image every time the code changes. In docker compose you can use volumes property to do this. You can read more here https://docs.docker.com/compose/compose-file/



Example




version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env
volumes:
- ./app:/app





share|improve this answer


























  • Mounting source code will not resolve the problem and completely unrelated.

    – Alex
    Nov 21 '18 at 7:20











  • If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

    – Andrei Dumitrescu-Tudor
    Nov 21 '18 at 7:21













  • Did not even think about it but could be possible.

    – Alex
    Nov 21 '18 at 7:43
















0














You need to mount the source code folder in the docker compose rather than the dockerfile, otherwise you need to rebuild the image every time the code changes. In docker compose you can use volumes property to do this. You can read more here https://docs.docker.com/compose/compose-file/



Example




version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env
volumes:
- ./app:/app





share|improve this answer


























  • Mounting source code will not resolve the problem and completely unrelated.

    – Alex
    Nov 21 '18 at 7:20











  • If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

    – Andrei Dumitrescu-Tudor
    Nov 21 '18 at 7:21













  • Did not even think about it but could be possible.

    – Alex
    Nov 21 '18 at 7:43














0












0








0







You need to mount the source code folder in the docker compose rather than the dockerfile, otherwise you need to rebuild the image every time the code changes. In docker compose you can use volumes property to do this. You can read more here https://docs.docker.com/compose/compose-file/



Example




version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env
volumes:
- ./app:/app





share|improve this answer















You need to mount the source code folder in the docker compose rather than the dockerfile, otherwise you need to rebuild the image every time the code changes. In docker compose you can use volumes property to do this. You can read more here https://docs.docker.com/compose/compose-file/



Example




version: '3'
services:
web:
build: .
ports:
- "5000:5000"
env_file:
- .env
volumes:
- ./app:/app






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 21 '18 at 7:30

























answered Nov 21 '18 at 7:16









Andrei Dumitrescu-TudorAndrei Dumitrescu-Tudor

19719




19719













  • Mounting source code will not resolve the problem and completely unrelated.

    – Alex
    Nov 21 '18 at 7:20











  • If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

    – Andrei Dumitrescu-Tudor
    Nov 21 '18 at 7:21













  • Did not even think about it but could be possible.

    – Alex
    Nov 21 '18 at 7:43



















  • Mounting source code will not resolve the problem and completely unrelated.

    – Alex
    Nov 21 '18 at 7:20











  • If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

    – Andrei Dumitrescu-Tudor
    Nov 21 '18 at 7:21













  • Did not even think about it but could be possible.

    – Alex
    Nov 21 '18 at 7:43

















Mounting source code will not resolve the problem and completely unrelated.

– Alex
Nov 21 '18 at 7:20





Mounting source code will not resolve the problem and completely unrelated.

– Alex
Nov 21 '18 at 7:20













If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

– Andrei Dumitrescu-Tudor
Nov 21 '18 at 7:21







If the image was build when the code was only hello world, then the docker will only respond to that, as well as all other further changes of the code will not be reflected in the image.

– Andrei Dumitrescu-Tudor
Nov 21 '18 at 7:21















Did not even think about it but could be possible.

– Alex
Nov 21 '18 at 7:43





Did not even think about it but could be possible.

– Alex
Nov 21 '18 at 7:43


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53405430%2fflask-with-docker-returning-404-on-all-routes-except-root%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

Npm cannot find a required file even through it is in the searched directory

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith