3.6 KiB
3.6 KiB
Learning Log - Gemini CLI
This document records mistakes made during interactions and their corresponding solutions, aiming to improve future performance and accuracy.
Docker and File Operation Mistakes
1. config.yaml
not found during Docker build
- Mistake: Assumed
config.yaml
would be present forCOPY
instruction in Dockerfile when it was dynamically generated bystart.sh
at runtime. - Solution: Created a placeholder
config.yaml
file in the build context to satisfy theCOPY
instruction during the Docker build process. Thestart.sh
script then overwrites this placeholder with the dynamically generated content.
2. apt-get
permission denied during Docker build
- Mistake: Encountered
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
duringapt-get update
orinstall
in Dockerfile. - Solution: Explicitly set
USER root
beforeapt-get
commands in the Dockerfile to ensure they run with necessary privileges. Also, ensuredDEBIAN_FRONTEND=noninteractive
was used to prevent interactive prompts.
3. chown: invalid user: 'cloudron:cloudron'
- Mistake: Attempted to change ownership of files to
cloudron:cloudron
before thecloudron
user and group were created in the Docker image. - Solution: Added explicit
RUN groupadd -r cloudron && useradd -r -g cloudron cloudron
commands in the Dockerfile before thechown
instruction to ensure the user and group exist.
4. docker run -it
"the input device is not a TTY"
- Mistake: Attempted to run Docker containers with
-it
flags in a non-interactive environment, leading to TTY errors. - Solution: For running containers in the background, use detached mode (
-d
) and rely ondocker logs
ordocker cp
for inspecting output and files. Avoid-it
unless a true interactive terminal session is required and supported by the environment.
5. replace
tool "No changes to apply" or "Expected 1 occurrence but found X"
- Mistake: Provided
old_string
to thereplace
tool that either did not exactly match the target text or matched multiple times, leading to failed or unintended operations. - Solution: Always read the file content immediately before using
replace
to obtain the exactold_string
(including all whitespace, indentation, and line endings). For complex blocks or when multiple matches are a risk, consider overwriting the entire file content usingwrite_file
if appropriate for the context.
6. start.sh
duplication
- Mistake: Unintended duplication of script content within
start.sh
due to imprecisereplace
operations, where a section of the script was inadvertently appended to itself. - Solution: When making significant structural changes or large modifications to a script, it is safer and more reliable to read the entire file, perform the modifications in memory, and then overwrite the entire file using
write_file
.
7. APISIX etcd connection issues (local testing)
- Mistake: Presumed APISIX would run in a truly standalone mode for local testing without an etcd instance, or that
localhost
would correctly resolve to a host-exposed etcd port from within the container. - Solution: For local testing of applications with external dependencies like etcd, explicitly spin up the dependent service in a separate container. Connect the application container to the dependency container using a user-defined Docker network and refer to the dependency by its service name (e.g.,
apisix-etcd
) as the hostname. This accurately simulates the Cloudron environment where addons are provided as networked services.