How to Use Firefox and Chrome Profile Data in InternetIncome Containers
InternetIncome containers require pre-packaged browser profiles in firefoxprofiledata.zip and chromeprofiledata.zip to persist login states and custom settings across container restarts.
The engageub/internetincome repository orchestrates browser-based income apps inside Docker containers. To stay logged into platforms like Ebesucher and Adnade, you must supply packed profile archives that the main script automatically extracts, duplicates, and mounts into each browser instance.
Prerequisites: Profile Archives
The orchestration script internetIncome.sh expects two specific archives in the repository root. The required files list is hardcoded at line 59 in internetIncome.sh:
firefoxprofiledata.zipchromeprofiledata.zip
If either archive is missing, the script aborts immediately with an error message (Chrome profile file does not exist or Firefox profile file does not exist). These archives serve as the master templates copied to every container instance on startup.
How the Script Handles Browser Profiles
The workflow follows four distinct phases coded into internetIncome.sh:
1. Archive Extraction
Before launching any container, the script extracts the zip files into working directories. This ensures fresh copies are available for duplication.
-
Chrome extraction occurs at lines 319–326:
unzip -o $chrome_profile_zipfileThis creates or overwrites the
chromeprofiledatafolder. -
Firefox extraction occurs at lines 385–393:
unzip -o $firefox_profile_zipfileThis creates or overwrites the
firefoxprofiledatafolder.
2. Per-Instance Data Preparation
Each browser instance receives its own isolated data directory to prevent conflicts. The script creates numbered folders (e.g., chromedata/data1) and populates them with the extracted profile contents.
- Chrome data setup at lines 41–46 copies the unpacked profile into the instance-specific folder.
- Firefox data setup at lines 450–456 performs the same operation for Firefox instances.
Permissions are explicitly set to user 911, the UID employed by the LinuxServer/jlesage base images used in these containers.
3. Bind-Mounting into Containers
The prepared profile folders are mounted into the container’s /config directory via Docker bind mounts. This allows the browser to read from and write back to the host filesystem.
-
Chrome mount (line 57):
--mount type=bind,source=$PWD/$chrome_data_folder/data$i/$chrome_profile_data,target=/config -
Firefox mount (line 452):
--mount type=bind,source=$PWD/$firefox_data_folder/data$i,target=/config
4. Persistence Across Restarts
Because the script copies the master profile before each --start invocation, changes made inside a running container (new cookies, extensions, or settings) are retained in the numbered data folders. Subsequent restarts re-read these modified folders, ensuring continuity without requiring you to repack the zip archive after every change.
Customizing Your Browser Profiles
To inject your own logged-in sessions or extensions, modify the archives before starting the script.
Modifying Firefox Profiles
Extract the default archive, launch Firefox with the extracted directory, make your changes, then repack:
# Extract the master profile
unzip -o firefoxprofiledata.zip -d firefoxprofiledata
# Launch Firefox using this profile path
firefox -profile "$(pwd)/firefoxprofiledata"
# After logging in and configuring settings, repack the archive
zip -r firefoxprofiledata.zip firefoxprofiledata/*
Modifying Chrome Profiles
The process is identical for Chromium-based browsers:
# Extract the master profile
unzip -o chromeprofiledata.zip -d chromeprofiledata
# Launch Chromium with the custom user data directory
chromium --user-data-dir="$(pwd)/chromeprofiledata"
# Repack after configuration
zip -r chromeprofiledata.zip chromeprofiledata/*
Using Symlinks for Custom Paths
If you prefer maintaining your profile folders outside the repository root, replace the zip file with a symbolic link:
rm firefoxprofiledata.zip
ln -s /path/to/your/firefoxprofiledata firefoxprofiledata.zip
The existence check at line 59 treats symlinks identically to regular files, allowing you to version-control your profiles separately while satisfying the script’s requirements.
Summary
- Required files: The script mandates
firefoxprofiledata.zipandchromeprofiledata.zipin the repository root (line 59). - Extraction logic:
internetIncome.shunpacks both archives usingunzip -obefore container creation (lines 319–326 and 385–393). - Instance isolation: Profiles are copied into numbered subdirectories (
chromedata/data1, etc.) with UID911permissions (lines 41–46, 450–456). - Container injection: Bind mounts map host profile folders to the container’s
/configpath (lines 57 and 452). - Customization workflow: Extract, modify with standard browser binaries, repack, then run
sudo bash internetIncome.sh --start.
Frequently Asked Questions
What happens if I delete the zip files after the first extraction?
The script will abort at the validation step (line 59) during the next --start invocation. While the extracted folders in chromeprofiledata/ or firefoxprofiledata/ may persist, internetIncome.sh requires the master archives to exist before it will proceed with container creation.
Can I use the same profile for multiple simultaneous instances?
Yes. The script copies the master profile into separate per-instance folders (e.g., data1, data2) before mounting. Each container writes to its own isolated copy, preventing collisions while allowing you to scale horizontally from a single source archive.
Do I need to repack the zip file after every browser session?
No. Because the bind mount allows writes back to the host filesystem, cookies and settings persist in the numbered data folders between restarts. You only need to repack the zip when you want to update the master template used to initialize new instances or when moving to a fresh deployment.
Which Docker images consume these profiles?
The profiles are mounted into containers based on LinuxServer and jlesage images (using UID 911). These specifically support the Ebesucher and Adnade browser automation apps defined in properties.conf. The mount target /config is the standard configuration path expected by these image maintainers.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →