I found out that it is truly impossible to have multiple docker files in one folder, but there is a workaround. I have created a separate subfolders with each having its own dockerfile for either windows or linux in it and nothing else. In the YAML file for the pipeline that creates those docker images, I have added a step before docker compose, that moves the dockerfile out of the subfolder and into the main folder where the relevant code files are. It is possible to have only one YAML file and create an IF statement that will select the correct dockerfile based on parameters of the pipeline run.


multiple dockerfiles for one code

I have a python application that I need to put into a docker. Since I need the docker to be able to run on windows servers and linux servers, its best to create two separate docker images, one for each operating system. Since docker is composed using docker files, and each docker image is a derivation of prebuilt docker images and they are already build with different operating systems in them, I need to have different docker files for each pipeline. However, docker does not allow to have multiple docker files and only allows one docker file named "Dockerfile" in a folder with code. How can I create multiple docker files for multiple pipelines?

it seems that the reason why Docker uses much more memory is that it does not allow the operating system to use virtual memory (swap memory). What I didn't see in the original debugging, is that the python program consumes memory of several GB, but windows has automatically moved another several GB of memory to virtual memory to save RAM space. This is however not enabled in docker environment, so the only RAM available to the docker is the one that is specified in the set up phase.



Docker uses way more memory than python program on its own

I have created a program in python that simulates business processes. For extremely large processes, the simulation can run for hours and the memory requirements are in GB. However, if I create a docker container, the docker image consumes cca 3x more memory than the original python program and if I limit the memory of the docker to even 2x the original python memory, the python program inside the docker will fail with out of memory error.


When starting docker a bridge network is automatically started, this network has its own ip and you have to check what is the ip of that network. If you are running it locally and used localhost, the bridge network's adress might be different from localhost and that might be why you weren't able to connect. However, using the containers' name is a much safer way to communicate between servers, docker will choose the correct address.

Docker compose versions are not compatible, because of that they don't support all functions, you have to read the documentation of the version.


First of all, while there is more or less one stable option for Java, there exist many different libraries for JavaScript and some of them don't interact very well with Docker. As such, I recommend using the client library to implement the socket client.

Docker actually allows you to address your components via the names of their containers. So instead of using localhost or other IP addresses to connect to your container, you should specify the name of the container, for example use the address ws://socketserver:4001 if the name of the container that hosts the server is socketserver and it runs on port 4001. Furthermore, in your docker-compose file, you should make sure that there are no conflicts between exposed ports, and that the relevant port on the server is exposed. After that, your components should be able to interact with each other without any issues.



Websocket interactions in Docker

I am trying to get my Websocket server (Java) and client (JS) to interact with each other when they are both running in separate Docker containers. However, no matter what I do, I cannot get the client to even establish a connection to the server. What can be done here?

Installing the newest version of docker-compose should solve this issue.

Current docker-compose is probably installed via 'apt-get install'.

If the 'docker-compose -v' is not 1.27.4 (currently newest version)

Run following:

'sudo curl -L "$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose'

Instead of VERSION you put 1.27.4 which is the currently newest version.

Afterwards apply executable permissions on the downloaded binary:
'sudo chmod +x /usr/local/bin/docker-compose'

Now after running 'docker-compose -v' you should have the '1.27.4' version and the Dockerfile should not throw an error.

docker-compose invalid type in volume

I am getting a following error when I run docker-compose up: *volumes contains an invalid type, it should be a string* my docker-compose file: data-emitter: build: context: DataEmitter dockerfile: ./Dockerfile volumes: - type: bind source: ./DataEmitter/data/logs.txt target: /data/logs.txt read_only: true Since there is a type: bind, what is the problem here?


Subscribe to Docker