flask with docker returning 404 on all routes except root
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
add a comment |
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
I notice that you have an extra "." in the host. It should behost="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
add a comment |
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
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
python python-3.x docker flask docker-compose
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 behost="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
add a comment |
I notice that you have an extra "." in the host. It should behost="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
add a comment |
1 Answer
1
active
oldest
votes
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
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
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
add a comment |
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
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
add a comment |
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
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
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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