Building custom app - authentication problem
-
I am building my first custom app in Docker in Python and I want to host it on Cloudron.
Currently, the repository is set up on docker.com. I have set up the repository in the cloudron settings using an access token. I have a CloudronManifest.json, a Dockerfile and the requirements file (since it's python), but I am stuck when runningcloudron build
as I consistently run into this error message:
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fc9470e4750>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/asgiref/
The same comes with any other package that happens to be the first in the requirements file.
I am the owner of the Docker repository.
Does anyone know what I can do about it?
-
@ekevu123 could you share your full step by step process since this error alone is confusing where it originates from.
You could also use
script
andscriptreplay
to share your step by step shell.
Or a tool / service like https://asciinema.org/ -
Here is the Cloudron manifest file, private information erased:
{ "id": "LINK", "title": "Title", "version": "1.0.0", "manifestVersion": 1, "description": "Description", "author": "author", "dockerImage": "link-to-image:tag", "healthCheckPath": "/", "httpPort": 80, "addons": { "localstorage": {}, "mysql": {} } }
Here is the docker file:
FROM python:latest # Set the working directory to /app WORKDIR /app # Copy the requirements file into the container at /app COPY . /app/ # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt RUN pip install gunicorn # Expose port 8000 for the Django application EXPOSE 8000 # Set the environment variable for Django to run in production mode ENV DJANGO_SETTINGS_MODULE=demo.settings RUN python3 manage.py collectstatic # Run Django with Gunicorn CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] #CMD ["gunicorn", "--bind", "0.0.0.0:8000", "demo.wsgi","--static-map /static=app/static"]
I also have a requirements file with python packages.
I have installed Cloudron CLI and run
cloudron build
on my local machine in the relevant folder.
That's when the error occurs when the requirements from Python need to be downloaded. All other steps run normally in the process.
-
@ekevu123
Regarding the Dockerfile:
FROM python:latest
all Cloudron apps relay on thecloudron/base
image.
Please use that image instead.Example:
cloudron/base:4.0.0@sha256:31b195ed0662bdb06a6e8a5ddbedb6f191ce92e8bee04c03fb02dd4e9d0286dfMore pointers:
- all app code should be stored in
/app/code
EXPOSE 8000
- not needed since you define that in theCloudronManifest.json
with"httpPort": 8000
manifestVersion
is wrong see => https://docs.cloudron.io/packaging/manifest/#manifestversion should be value2
FROM cloudron/base:4.0.0@sha256:31b195ed0662bdb06a6e8a5ddbedb6f191ce92e8bee04c03fb02dd4e9d0286df # Set the working directory to /app WORKDIR /app/code/ # Set the environment variable for Django to run in production mode (note: move all static stuff to the top so if you change stuff later on it has las layers to rebuild) ENV DJANGO_SETTINGS_MODULE=demo.settings # Copy the requirements file into the container at /app COPY . /app/code/ # Install any needed packages specified in requirements.txt (Note from me: put into one layer RUN pip install -r requirements.txt && \ pip install gunicorn && \ python3 manage.py collectstatic # Run Django with Gunicorn CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
The
CloudronManifest.json
{ "id": "LINK", "title": "Title", "version": "1.0.0", "manifestVersion": 2, "description": "Description", "author": "author", "dockerImage": "link-to-image:tag", "healthCheckPath": "/", "httpPort": 80, "addons": { "localstorage": {}, "mysql": {} } }
Can you try to build like this?
Also see the docs about the Manifest what is required and what is optional, so you can limit the errors in that file for first testing builds.
- all app code should be stored in
-
@BrutalBirdie Thank you for your help on this! I tried to follow your suggestions, but I am still getting this result during "cloudron build":
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fa11a308b80>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/asgiref/
Here is what I have changed:
- changed Manifest version to 2
- removed add-ons
And I tried to run the Dockerfile as you suggested.
-
-
-
@ekevu123 Maybe we continue here, it's not a problem (for us atleast). Can you tell us what issue you are facing when trying to build the image ?
For a start, let's ignore the Cloudron aspects and just try to build the docker image. Are you able to
docker build -t your_username/customimage .
? What is the output ? -
@BrutalBirdie said in Building custom app - authentication problem:
"dockerImage": "link-to-image:tag",
For my education, is this line needed in the manifest file? because we are building the Dockerfile to produce an image.
I've never used this line when building a custom package -
@timconsidine right, that line is not needed and not correct. One shouldn't specify a static docker image in the manifest.
-
We can continue here, I just thought if I am supposed to share more personal information like repo access, then we can do this privately. But alright, I appreciate the help I am getting here!
Regarding the questions above:
-
I have removed the link to the docker image from the Cloudron manifest and tried to run "cloudron build" again, which gets me stuck here again:
Step 4/6 : RUN pip install --no-cache-dir -r requirements.txt
---> Running in e834d414ac34 -
Now I am trying to build the docker image without Cloudron, see above, and I am getting the same issue.
The requirements file I am getting stuck with looks like this:
asgiref==3.6.0
beautifulsoup4==4.12.2
certifi==2022.12.7
(and more following)It doesn't help to simply delete a few requirements, it will always hang with the first one in the file.
-
-
@ekevu123 yes, no worries Just wanted to continue here since so far it's mostly something docker related and not cloudron related as such.
It seems this is a general Docker building issue. So, much depends on your platform / OS as well. Is this a Mac or Windows or Linux ?
Usually, the best way to debug Docker build issues is something like:
- First run,
docker run -ti cloudron/base:4.0.0 /bin/bash
. This will give you a bash prompt. - Now, execute the commands in your Dockerfile one by one in the prompt and see where it breaks.
- First run,
-
@girish said in Building custom app - authentication problem:
Usually, the best way to debug Docker build issues is something like:
that's a cool "trick"
-
I know where it breaks, when downloading the python requirements. But I found the issue - apparently, you can not do that when being on VPN.
Now I get this error message in the end:
error parsing HTTP 403 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body>\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n"
Failed to push image (are you logged in? if not, use "docker login")However, I am logged in (I ran "docker login" right before executing "cloudron build").
-
@ekevu123 That's good progress! Not sure where you are pushing to, did you set the right image name ? You can try
cloudron build --set-repository
. Here, you should enter something likeekevu123/appname
(whereekevu123
is your docker hub username and appname is the repository). -
Thank you very much, we are getting somewhere!
I got to run "cloudron install --image" after building the docker successfully. But I ran into another particular problem.
Firstly, when running the command, I got this error message:
App installation error: Installation failed: Unable to pull image PATH. message: (HTTP code 404) unexpected - pull access denied for PATH, repository does not exist or may require 'docker login': denied: requested access to the resource is denied statusCode: 404So, I made sure I was logged in.
Secondly, I tried to run the command again and got this:
Failed to install app: 409 message: primary location 'PATH' is in use
(I could probably just specify a new path, it's not critical, but to keep it clean it would be great to know how to delete the failed attempt)However, the Cloudron dashboard doesnt load anymore. It stays grey. If I try to log in in another browser, I get to the login mask, after putting in my details, I just see a grey screen. Fortunately, apps seem to work still, I can access them separately.
Independently of the actual docker error, that is an odd behaviour. I'll try to go through the tutorial for how to save cloudron next unless I see something specific in this thread.