A container step is an alternative to the custom step and offers more flexibility on how you provide your custom processing logic. The fundamental idea is built on docker containers.
It can be used if the custom step runs into limitations.
Advantages:
- Pick any programming language. You are no longer restricted to just python or java.
- Run as many processes inside the container as you need.
- Provide environment variables at the step level.
- Provide as much resources as you want for this step alone.
Limitations:
- The container step feature is not available for free plans.
- Image size cannot exceed 10GB, or it will be rejected during push.
Pushing the docker images
- Prepare your docker image as shown in the Java or Python examples, using any programming language.
Important:
- Ensure the socket connections are implemented as shown in the examples – the
exchangeDataHolderis provided and accepted back through socket channels.
- Ensure the socket connections are implemented as shown in the examples – the
- Tag your images in the right format. For example, if the image was built using the command 'docker build -t custom-step-echo:latest', then it must be tagged in the format below:
docker tag custom-java-step-container:latest bosch-iot-insights.com/imageregistry/<project>/custom-java-step-container:latest - Create an API user with admin role.
- Login through the docker CLI using the above credentials:
Push the tag using the docker push command:
docker push bosch-iot-insights.com/imageregistry/<project>/custom-java-step-container:latest
Configuring and using containers in a pipeline
- Create a pipeline as described in Creating a pipeline guide.
- From the Configuration tab, add a Container step.
- In Container Image field, select the image that you have previously pushed.
- If the step is the first one after the Input Trigger, select the way the input data will be fetched and processed via the Input Type dropdown. The supported input types are:
- Exchange data holder: Injected input data is provided as JSON. All input data is embedded directly in the injected data.
- Payload ref through azure blob: Injected input data is provided as JSON (small files), or with a payload reference (large files). Small input data is embedded directly in the injected data. Large input data has to be fetched from the S3 object storage by using the payload reference, and needs to be processed by using streaming. This can prevent memory congestion.
- Mounted volume: The input document is provided as a file on an NFS-mounted shared volume. The data is then not included inline but the
ExchangeDataHoldercontains the field 'payloadFile' with a path to the actual file.
The Input Type dropdown is not provided for the rest of the Container steps in the pipeline. - Expand Advanced Settings, to provide new commands and arguments in the respective fields and to ignore in this way the configuration from the initial script set in your container:
- In Memory (MB) and in Storage (MB) fields, ensure you provide enough resources to the image so that it can function without hitting memory limits. Select the information icon , to find Memory guidance for configuring the memory based on the size of the input document:
- In Step Timeout (in minutes) field, set the amount of time after which the container step will be aborted.
- In Environment Variables section, configure the required environments you need. For example, the screenshot above shows that an environment named 'DEBUG_LOGS' is set.
→ The platform will pass the environment variables to your container without any additional processing. - In Environment Credentials section, select those credentials to inject their variables into this step of runtime. For details, refer to Credentials guide.
- Select Save to keep the Container step.
Deleting and restoring a container image
- The container images can be deleted from the step configuration UI by selecting the Replace image button:
- To restore the container image, push the tag again, as described in Pushing the docker images section at the top.
Deleting unused container images
Images are automatically deleted when they are not used in the last 30 days, and are not part of an active pipeline. This is a hardcoded configuration which cannot be customized at the project level.
Troubleshooting
# | Error | Reason |
|---|---|---|
1 | I receive "Image size exceeds the maximum allowed size" after some layers uploaded successfully. | This happens when the image that is being pushed is greater than 10GB. Since docker splits an image into different layers, we will not have the ability to detect the overall size upfront. Hence, the error message appears at a later stage after the sum of uploaded layers reaches the max allowed limit. |
2 | My login failed with the error message of "Error response from daemon: Get "https://bosch-iot-insights.com/v2/": unauthorized: authentication required" | This is likely the case where either usename, or password is wrong. |
3 | My login was successful, but the push was rejected with "denied: requested access to the resource is denied" error. | This could happen for following reasons:
|
4 | I tried to login, but I was not asked for any credentials. I no longer wish to use that user. How to clean up my docker login to this domain? | You can perform 'docker logout bosch-iot-insights.com', and login again with the user you wish to use. |








