Coldfusion server docker on M1 MacBook Pro

I need to setup a Coldfusion server on my new M1 MacBook Pro, but have been unsuccessful. I have tried the official Adobe images, CommandBox images, and a few older images I’ve found that combined Coldfusion and Apache servers.

Is anyone successfully running a Coldfusion dev environment on their M1 MacBook? If so, I would really appreciate any help/info to get me started. Sorry if I missed any details, this is my first post here. Thanks!

I haven’t tried Coldfusion, but I have an M1 MacBook Air. Since it has Docker Desktop which may not always compatible with tutorials written for Docker on linux, you could run into problems. If you can describe the problem with error messages and every sharable information, we can try to identify the cause and tell you what you need to do differently using Docker Desktop or an ARM cpu like the M1.

1 Like

This is the first image I tried - Docker Hub

After pulling the image, I tried to run the container as so:

docker container  run --platform linux/amd64 -dt -e acceptEULA=YES -e password=admin -p 80:80 -p 443:443 -p 8500:8500 -v /Library/WebServer/:/var/www adobecoldfusion/coldfusion2018:latest

But when I try to open in browser through Docker desktop, http://localhost:443/ opens up but cannot connect.

“localhost didn’t send any data.
ERR_EMPTY_RESPONSE”

I also tried this command:

docker container  run --platform linux/amd64 -dt -e acceptEULA=YES -e password=admin -p 80:80 -p 8500:8500 -v /Library/WebServer/:/var/www adobecoldfusion/coldfusion2018:latest

But it opens localhost in the browser and still cannot connect.

I also tried to set this one up, but it seems pretty old and ended up throwing an error at some point (sorry don’t have the exact error message).

You are trying to access port 443 using HTTP instead of HTTPS. Is this what you really tried to open in the browser or is it just a typo in your post?

Sorry, that was a typo.

I was able to access the CF admin at http://localhost:8500/CFIDE/administrator/ and it finalized its setup. But I still can’t reach localhost on port 80.

Try to forward an other port instead of 80. It worked for some people in the past, although I have never encountered this issue when port 80 doesn’t work. Do you have anything in the container log when you open the app from the browser?.

I have been using ortussolutions/commandbox and it’s been the only solution I’ve been able to have work consistently for my dev environment and I’m using an M1 iMac. I’m not a commandbox fanboy either, I just selected it because they actually have a working container that is native for ARM/M1.

1 Like

Thank you for your feedback! Are you developing in Coldfusion as well?

Yep, every day, and I actually have a docker compose setup that spins up multiple ColdFusion instances to simulate our multi-server environment since some of my apps use web services to talk between front-end and back-end servers. With some caveats, the commandbox images work pretty well and let me simulate my environment in dev pretty well.

Do you use Apache on your Mac with Coldfusion server, or the built-in Adobe one? Sorry for all the questions; just trying to figure out how to set up my environment properly. I also has MariaDB installed on my previous laptop so I will need to connect it to the CommandBox image somehow.

That’s one thing I’ve always “cheated” on with my dev setup… I just use the CF built in web server even though production is actually Windows with IIS. If you just keep that in mind it’s usually fine. You can indeed have a DB container as well, I actually have a MSSQL container but you can just as well have MariaDB. Once you start having multiple containers that you want to talk to each other it’s best to learn how to configure them together with docker compose. Just learning those Docker container fundamentals is a learning curve but a very valuable one, so go for it. :smiley:

Thanks Josh. I’ll take a look at docker compose. I hope I can get Coldfusion and MariaDB containers up and running.

For the sake of demonstration, here is a docker-compose file I threw together… based on mine but then simplified down for an example:

version: "3"
services:

    webapps:
        image: ortussolutions/commandbox:arm64-adobe2018-3.4.0
        container_name: webdev_webapps
        depends_on:
            - mssql
        ports:
            - 80:8080
            - 8500:8581
        volumes:
            - /Users/your_user_name/Sites/app:/app
            - /Users/your_user_name/Sites/logs:/usr/local/lib/serverHome/logs
        networks:
            - cfnet
 
    mssql:
        image: mcr.microsoft.com/azure-sql-edge
        container_name: webdev_mssql
        ports:
            - 1433:1433
        volumes:
            - mssqlvol:/var/opt/mssql
        networks:
            - cfnet

volumes:
    mssqlvol:

networks:
    cfnet:

1 Like

Awesome, thank you! This will be a great starting point for me.

So with this setup, do you still utilize a server.json config file in your project’s root folder? I have some aliases referenced in it, but it doesn’t seem like it’s being picked up anymore. The aliases did work before when I just used CommandBox without Docker.

@joshuacurtiss

I’m liking where this is going. I’ve had issues with setting up my dev environment. I have an environment where I have multiple subdomains for my app that rely on each other (EX api, data, manager, etc) Historically we’ve used apache to handle the traffic between each subdomain.

With Docker and Commandbox I assume we need to setup a separate instance for each subdomain? And this can all be set up using a docker compose file.

Also we have a com folder that holds communal CFCs. Would each instance need to have a mapping to that same folder?

Thank you in advance.

Yeah. Just remember that shortcuts to somewhere outside of the directories that are mapped to a container are not accessible to the app running on the container. But you can expose the same directory to each container. That’s the way to handle it.

Note too that one stumbling block when you’re new to docker and containers is thinking about where code is running when it refers to a web service in another container. If you’re running client-side code that, say, calls a web service from another container, you may do so by referring to localhost:port where port is the port you’re exposing for that container. However, that isn’t how ColdFusion in one container can refer to a web service in another container.

I’m not explaining that very clearly… The point is, making sure you understand how communication between containers works. Here’s the first tutorial I found when googling for that, just as an idea to get you started: https://www.tutorialworks.com/container-networking/

Yeah, I’ve been using a .cfconfig.json file in the root to define my datasources, mappings, etc.