<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mac &#8211; Manuel Bogner&#039;s Blog</title>
	<atom:link href="https://blog.mbo.dev/archives/category/mac/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mbo.dev</link>
	<description>Solutions to everyday IT problems</description>
	<lastBuildDate>Sun, 05 Jan 2025 18:34:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.mbo.dev/wp-content/uploads/2022/11/cropped-cropped-mbo-white_opt-32x32.png</url>
	<title>Mac &#8211; Manuel Bogner&#039;s Blog</title>
	<link>https://blog.mbo.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Create Ramdisk on MacOS</title>
		<link>https://blog.mbo.dev/archives/2044</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Sun, 05 Jan 2025 18:34:52 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.mbo.dev/?p=2044</guid>

					<description><![CDATA[ramdisk.sh: This script creates a ramdisk with the first parameter taken as gigabytes. So runnning ./ramdisk.sh 16 will create a disk with 16 gigabytes and it will be named &#8220;ramdisk-16gb&#8221; and accessible via /Volumes/ramdisk-16gb. It will show up in finder as mounted volume. To get rid of it simply unmount it with the small icon [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><em>ramdisk.sh</em>:</p>



<pre class="wp-block-code"><code>#!/bin/sh -eu
NUMSECTORS=$(($1*1024*1024*1024/512))
echo "creating ramdisk with $1 GB ($NUMSECTORS sectors)"
MYDEV=$(hdiutil attach -nomount ram://$NUMSECTORS)
echo "created $MYDEV"
diskutil eraseVolume HFS+ "ramdisk-${1}gb" $MYDEV
echo "formatted $MYDEV"</code></pre>



<p>This script creates a ramdisk with the first parameter taken as gigabytes. So runnning <code><strong>./ramdisk.sh 16</strong></code> will create a disk with 16 gigabytes and it will be named &#8220;ramdisk-16gb&#8221; and accessible via <strong><em>/Volumes/ramdisk-16gb</em></strong>. It will show up in finder as mounted volume. To get rid of it simply unmount it with the small icon right to the name.</p>



<p><strong>ATTENTION: Everything stored on this devices will be lost when the mac is turned off or the volume is removed.</strong></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sudo Timeout on MacOS</title>
		<link>https://blog.mbo.dev/archives/2040</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Thu, 07 Nov 2024 19:38:48 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.mbo.dev/?p=2040</guid>

					<description><![CDATA[I&#8217;m using homebrew and its casks a lot to install software on my MacBook. This way I&#8217;m using a custom script comparable to a simple apt update &#38;&#38; apt dist-upgrade on a Linux sysmtem. My update script looks like the following: Running this keeps most of my system up to date. I only have a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;m using homebrew and its casks a lot to install software on my MacBook. This way I&#8217;m using a custom script comparable to a simple apt update &amp;&amp; apt dist-upgrade on a Linux sysmtem. My update script looks like the following:</p>



<pre class="wp-block-code"><code>#!/bin/zsh
source ./.zshrc

echo "starting local upgrades of homebrew, sdk and nvm\n"

echo "###########################"
echo "# homebrew"
echo "###########################"
# install see https://brew.sh
echo "update installed packages"
brew update
brew upgrade

echo "install packages"
brew install nvm
brew tap buo/cask-upgrade

echo "upgrade casks"
brew cu -ay

brew autoremove
brew cleanup

echo "\n\n\n"
echo "###########################"
echo "# sdk"
echo "###########################"

echo "install sdkman"
# https://sdkman.io/install
#curl -s "https://get.sdkman.io" | bash
sdk selfupdate

echo "update sdkman packages"
sdk update
sdk upgrade

echo "\n\n\n"
echo "###########################"
echo "# nvm"
echo "###########################"
echo "install LTS"
nvm install --lts

echo "\n\n\n"
echo "###########################"
echo "# npm"
echo "###########################"
npm update -g

echo "\n\n\n"
echo "###########################"
echo "done"</code></pre>



<p>Running this keeps most of my system up to date. I only have a few things installed either via AppStore or manually.</p>



<p>But where is the problem and what does this have to do with sudo you ask?</p>



<p>When you have a list of pending updates MacOS will ask you multiple time during a single run of the script for you password because sudo is using a very very short timeout for it. If you want to get rid of that problem run <code><strong>sudo viduso</strong></code> and add the following line after all those <code>Defaults</code> lines you will see in there:</p>



<pre class="wp-block-code"><code>Defaults	timestamp_timeout = -1</code></pre>



<p>This way sudo won&#8217;t forget your password in a single session. Of course that -1 could be a problem but for me it isn&#8217;t because I always close my terminals when I don&#8217;t need them anymore.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>HTML signature with Apple mail client</title>
		<link>https://blog.mbo.dev/archives/2038</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Thu, 10 Oct 2024 15:28:56 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.mbo.dev/?p=2038</guid>

					<description><![CDATA[Create a signature in the settings and add some placeholder text. Then close the mail client. The placeholder text will be replaced with html later. You will need the html code you want to use as signature. So have it ready to paste it later. Got to ~/Library/Mail/V10/MailData/Signatures and check which of the .mailsignature files [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Create a signature in the settings and add some placeholder text. Then close the mail client. The placeholder text will be replaced with html later. </p>



<p>You will need the html code you want to use as signature. So have it ready to paste it later.</p>



<p>Got to <code><strong>~/Library/Mail/V10/MailData/Signatures</strong></code> and check which of the <em><strong>.mailsignature</strong></em> files is the one you want to change. For every signature saved in the mail client there is such a file. Just check the content. Open the right file and replace the html after the header. Everything above that empty line is the header. Here a sample that illustrates this:</p>



<pre class="wp-block-code"><code>Content-Transfer-Encoding: 7bit
Content-Type: text/html;
charset=us-ascii
Message-Id: &lt;12341234-1234-1234-1234-123412341234>
Mime-Version: 1.0 (Mac OS X Mail 16.0 (xxxx))

&lt;old content></code></pre>



<p>Leave everything as is and replace all text &#8220;&lt;old content>&#8221; with your new html. Save the file. The right click it and click &#8220;Get Info&#8221; and there you need to select &#8220;Locked&#8221;. Otherwise the mail client will overwrite the content and not use it.</p>



<p>With the file locked, open the mail client and you will have your html signature ready to use.</p>



<p>#Apple #MailClient #AppleMailClient #HTMLSignature</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fix blackhole-2ch on MacOS &#8211; Could not kickstart service &#8220;com.apple.audio.coreaudiod&#8221;: 1: Operation not permitted</title>
		<link>https://blog.mbo.dev/archives/2021</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Wed, 17 Apr 2024 18:41:42 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=2021</guid>

					<description><![CDATA[Recently I received this error while upgrading or uninstalling blackhole-2ch via brew: Could not kickstart service &#8220;com.apple.audio.coreaudiod&#8221;: 1: Operation not permitted This was fixed by the following: Another option seems to be to fix the issue with kickstart as described here. But I didn&#8217;t try that.]]></description>
										<content:encoded><![CDATA[
<p>Recently I received this error while upgrading or uninstalling blackhole-2ch via brew:</p>



<p><strong><em>Could not kickstart service &#8220;com.apple.audio.coreaudiod&#8221;: 1: Operation not permitted</em></strong></p>



<p>This was fixed by the following:</p>



<pre class="wp-block-code"><code>sudo su
rm -rf /opt/homebrew/Caskroom/blackhole-2ch
exit
brew install blackhole-2ch</code></pre>



<p>Another option seems to be to fix the issue with kickstart as described <a href="https://github.com/ExistentialAudio/BlackHole/issues/779#issuecomment-2058581435">here</a>. But I didn&#8217;t try that.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Convert PSD files to PNG with ImageMagick in a simple bash script</title>
		<link>https://blog.mbo.dev/archives/2014</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Mon, 12 Feb 2024 11:54:02 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Media]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=2014</guid>

					<description><![CDATA[Keeping original PSD files was quite good practice over the years but mostly other formats are needed down the road. Because opening Photoshop to export a file takes quite some time and isn&#8217;t efficient I wrote a small script to replace this task: This takes the file(s) to convert as argument(s). You can also just [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Keeping original PSD files was quite good practice over the years but mostly other formats are needed down the road. Because opening Photoshop to export a file takes quite some time and isn&#8217;t efficient I wrote a small script to replace this task:</p>



<pre class="wp-block-code"><code>#!/usr/bin/env bash

if &#91;&#91; "" == "$@" ]]; then
    echo "usage: $0 &lt;file(s) to convert>"
    exit 1
fi

for i in "$@"; do
    directory=$(realpath $(dirname "$i"))
    file=$(basename "$i")
    name=${file%.*}
    extension=$(echo ${file##*.} | tr '&#91;:upper:]' '&#91;:lower:]')

    if &#91;&#91; "$extension" == "psd" ]]; then
        target="$directory/$name.png"
        if &#91;&#91; -e "$target" ]]; then
            echo "file already exists: '$target'"
        else
            echo "converting '$i'"
            convert "$i" -background none -flatten "$target" || exit 1
        fi
    fi
done</code></pre>



<p>This takes the file(s) to convert as argument(s). You can also just go with wildcards like <code>*.psd</code> to convert all psd files in a folder. Already converted files will be skipped.</p>



<p>You need ImageMagic installed on your machine to have access to the convert command.</p>



<p>Tested with ImageMagic 7.1.1-27 on MacOS Sonoma 14.3.1.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>kill process that has given port open</title>
		<link>https://blog.mbo.dev/archives/2011</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Tue, 06 Feb 2024 17:48:35 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=2011</guid>

					<description><![CDATA[Sometimes I need to lookup process that hold a port open. On Linux this is quite easy but on Mac I was struggling to find a proper way. Here is the netstat variant you can use on Mac: Replace the 8080 with the wanted port. You will see a line like this: The 54876 is [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Sometimes I need to lookup process that hold a port open. On Linux this is quite easy but on Mac I was struggling to find a proper way. Here is the netstat variant you can use on Mac:</p>



<pre class="wp-block-code"><code>netstat -anv -p tcp | grep tcp4 | grep "8080"</code></pre>



<p>Replace the 8080 with the wanted port.</p>



<p>You will see a line like this:</p>



<pre class="wp-block-code"><code>tcp4       0      0  127.0.0.1.8080         *.*                    LISTEN       131072  131072  54876      0 00000 00000006 00000000002d50b2 00000000 00000800      2      0 000001</code></pre>



<p>The <code>54876</code> is the process id. So you can send a <code>kill 54876</code>.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Homebrew Cask Update Tool: Your macOS Equivalent to Linux&#8217;s APT</title>
		<link>https://blog.mbo.dev/archives/1997</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Fri, 15 Dec 2023 09:51:50 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=1997</guid>

					<description><![CDATA[If you&#8217;re a macOS user who appreciates the convenience of package management tools like APT on Linux, then Homebrew Cask Update Tool is a game-changer you won&#8217;t want to miss. This nifty tool, available at https://github.com/buo/homebrew-cask-upgrade, brings the simplicity and efficiency of Linux package management to your Mac. Homebrew Cask Update Tool makes updating your [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>If you&#8217;re a macOS user who appreciates the convenience of package management tools like APT on Linux, then Homebrew Cask Update Tool is a game-changer you won&#8217;t want to miss. This nifty tool, available at <a href="https://github.com/buo/homebrew-cask-upgrade">https://github.com/buo/homebrew-cask-upgrade</a>, brings the simplicity and efficiency of Linux package management to your Mac.</p>



<p>Homebrew Cask Update Tool makes updating your installed applications a breeze. It automatically detects outdated software installed via Homebrew Cask and updates them with a single command, just like how you&#8217;d use APT on Linux. Say goodbye to manually checking for updates and navigating through various application menus.</p>



<p>Streamline your macOS software maintenance with Homebrew Cask Update Tool and enjoy a more efficient and hassle-free experience.</p>



<pre class="wp-block-code"><code>brew tap buo/cask-upgrade
brew cu -iay</code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>docker pull proxyconnect tcp: dial tcp: lookup http.docker.internal on 192.168.65&#8230; timeout</title>
		<link>https://blog.mbo.dev/archives/1982</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Mon, 06 Nov 2023 08:21:23 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=1982</guid>

					<description><![CDATA[After upgrading to macOS 14.1 my docker installation stopped woring and when I tried to pull an image it answered with the following error message: 192.168.65.0/24 is the configured docker internal network of Docker Desktop. It was running on defaults and I wasn&#8217;t aware of any manual changes. DNS of my host system worked properly: [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>After upgrading to macOS 14.1 my docker installation stopped woring and when I tried to pull an image it answered with the following error message:</p>



<pre class="wp-block-code"><code>➜  ~ docker pull ubuntu                                                                                                                        
Using default tag: latest                                                                                                                      
Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp: lookup http.docker.internal on 192.168.65.7:53:
 read udp 192.168.65.6:62314-&gt;192.168.65.7:53: i/o timeout        </code></pre>



<p>192.168.65.0/24 is the configured docker internal network of Docker Desktop. It was running on defaults and I wasn&#8217;t aware of any manual changes. DNS of my host system worked properly:</p>



<pre class="wp-block-code"><code>➜  ~ host registry-1.docker.io                                                                                                                 
registry-1.docker.io has address 34.194.164.123                                                                                                
registry-1.docker.io has address 18.215.138.58                                                                                                 
registry-1.docker.io has address 52.1.184.176                                                                                                  
registry-1.docker.io has IPv6 address 2600:1f18:2148:bc00:8334:ca86:c3d6:a507                                                                  
registry-1.docker.io has IPv6 address 2600:1f18:2148:bc02:cfd8:db68:ea1f:277c                                                                  
registry-1.docker.io has IPv6 address 2600:1f18:2148:bc01:a3b0:6734:c617:7c5c </code></pre>



<p>What exactly caused the issue didn&#8217;t reveal but resetting Docker Desktop to factory defaults fixed the problem. You can find this on the top right corner of the window behind the small bug icon -&gt; &#8220;Reset to factory defaults&#8221; button.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to create docker containers for multiple platforms / architectures</title>
		<link>https://blog.mbo.dev/archives/1930</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Mon, 17 Apr 2023 11:07:56 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=1930</guid>

					<description><![CDATA[First you need to choose a base image that is available for the target platforms as well. Create your Dockerfile as usual and then build the container for different platforms. This example would create an amd64 and a aarch64 (arm64/v8) image: Based on these you can create a manifest and upload it: This would already [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>First you need to choose a base image that is available for the target platforms as well. Create your Dockerfile as usual and then build the container for different platforms.</p>



<p>This example would create an <em><strong>amd64</strong></em> and a <em><strong>aarch64</strong></em> (arm64/v8) image:</p>



<pre class="wp-block-code"><code># ARM
<strong>docker build </strong>--platform=linux/<strong>aarch64</strong> -t <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-aarch64</strong> .
<strong>docker push</strong> -t <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-aarch64</strong>

# AMD
<strong>docker build</strong> --platform=linux/<strong>amd64</strong> -t <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em>-<strong>amd64</strong> .
<strong>docker push</strong> -t <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-amd64</strong></code></pre>



<p>Based on these you can create a manifest and upload it:</p>



<pre class="wp-block-code"><code><strong>docker manifest create</strong> <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em> \
  --amend <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-aarch64</strong> \
  --amend <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-amd64</strong>
<strong>docker manifest push</strong> <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em></code></pre>



<p>This would already provide an image <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em> available for <em>amd64</em> and <em>aarch64</em> platform on docker hub. But for convenience we also want a <em>latest</em> tag for that manifest:</p>



<pre class="wp-block-code"><code><strong>docker manifest create</strong> <em>&lt;dockerhub-username>/&lt;image-name></em>:<strong>latest</strong> \
  --<strong>amend</strong> <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-aarch64</strong> \
  --<strong>amend</strong> <em>&lt;dockerhub-username>/&lt;image-name>:&lt;version></em><strong>-amd64</strong>
<strong>docker manifest push</strong> <em>&lt;dockerhub-username>/&lt;image-name></em><strong>:latest</strong></code></pre>



<p>This uses the same hashes as the version uploaded before.</p>



<p>I am not sure if this is the correct or best way, but at least it works. On my M1 mac buildx didn&#8217;t work so I fell back to manifests that aren&#8217;t that complicated anyway.</p>



<p>Here an example image that was created and uploaded like this: <a rel="noreferrer noopener" href="https://registry.hub.docker.com/r/mbopm/cyberchef" target="_blank">https://registry.hub.docker.com/r/mbopm/cyberchef</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Replace docker with podman on MacOS</title>
		<link>https://blog.mbo.dev/archives/1891</link>
		
		<dc:creator><![CDATA[Manuel Bogner]]></dc:creator>
		<pubDate>Sat, 03 Dec 2022 12:20:31 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://blog.coffeebeans.at/?p=1891</guid>

					<description><![CDATA[Docker wants to bill companies for Docker Desktop. In my opinion it&#8217;s not worth it because there are multiple options how to replace it without the need to really change habits. Here the statement taken from Docker FAQ regarding payment for Docker Desktop: Who’s required to pay for Docker Desktop? Docker Desktop requires a paid, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Docker wants to bill companies for Docker Desktop. In my opinion it&#8217;s not worth it because there are multiple options how to replace it without the need to really change habits. Here the statement taken from Docker FAQ regarding payment for Docker Desktop:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h5 class="wp-block-heading">Who’s required to pay for Docker Desktop?</h5>



<p>Docker Desktop requires a paid, per-user subscription for organizations with more than 250 employees or more than $10 million in annual revenue per our&nbsp;<a href="https://www.docker.com/legal/docker-terms-service/">terms of service</a>.</p>
<cite>https://www.docker.com/pricing/faq/, 2022-12-03</cite></blockquote>



<p>Podman is an open source and free replacement licensed under Apache-2.0. Here the description of it taken from the homepage:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="http://podman.io/">Podman</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">&nbsp;is a daemonless, open source, Linux native tool designed to make it easy to find, run, build, share and deploy applications using Open Containers Initiative (</span><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="https://www.opencontainers.org/">OCI</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">)&nbsp;</span><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="https://developers.redhat.com/blog/2018/02/22/container-terminology-practical-introduction/#h.j2uq93kgxe0e">Containers</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">&nbsp;and&nbsp;</span><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="https://developers.redhat.com/blog/2018/02/22/container-terminology-practical-introduction/#h.dqlu6589ootw">Container Images</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">. Podman provides a command line interface (CLI) familiar to anyone who has used the Docker&nbsp;</span><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="https://developers.redhat.com/blog/2018/02/22/container-terminology-practical-introduction/#h.6yt1ex5wfo3l">Container Engine</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">. Most users can simply alias Docker to Podman (</span><cite style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">alias docker=podman</cite><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">) without any problems. Similar to other common&nbsp;</span><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="https://developers.redhat.com/blog/2018/02/22/container-terminology-practical-introduction/#h.6yt1ex5wfo3l">Container Engines</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">&nbsp;(Docker, CRI-O, containerd), Podman relies on an OCI compliant&nbsp;</span><a class="reference external" style="color: rgb(0, 75, 107); border-bottom: 1px dotted rgb(0, 75, 107); font-family: Georgia, serif; font-size: 17px; white-space: normal;" href="https://developers.redhat.com/blog/2018/02/22/container-terminology-practical-introduction/#h.6yt1ex5wfo55">Container Runtime</a><span style="color: rgb(62, 67, 73); font-family: Georgia, serif; font-size: 17px; white-space: normal;">&nbsp;(runc, crun, runv, etc) to interface with the operating system and create the running containers. This makes the running containers created by Podman nearly indistinguishable from those created by any other common container engine.</span></p>
<cite>https://docs.podman.io/en/latest/, 2022-12-03</cite></blockquote>



<p></p>



<p>To install it I simply followed these steps on my Mac:</p>



<pre class="wp-block-code"><code>brew install podman
podman machine init # create a qemu virtual machine
podman machine start # start it
export DOCKER_HOST='unix:///Users/manuel/.local/share/containers/podman/machine/podman-machine-default/podman.sock'</code></pre>



<p></p>



<p>With this in place you can continue running <code>docker</code> commands as usual and for most users a simple alias will do the trick if you don&#8217;t want to write podman instead of docker.</p>



<p>In IntelliJ you need to configure the <code>TCP socket</code> instead of <code>Docker for Mac</code> in the settings. Then also IntelliJ continues talking to the podman instance as it were a Docker Desktop. I named my host &#8220;Podman&#8221; instead of &#8220;Docker&#8221; and right-clicking the compose file and selecting &#8220;Run on Podman&#8221; worked like a charm. No difference to Docker Desktop before.</p>



<p>When you don&#8217;t need docker / podman you can stop it by running</p>



<pre class="wp-block-code"><code>podman machine stop</code></pre>



<p></p>



<p>To restart it simply write &#8220;start&#8221; instead of stop.</p>



<p>Here is what I added to my <code>.zshrc</code> file:</p>



<pre class="wp-block-code"><code>alias docker='podman'
export DOCKER_HOST='unix:///Users/manuel/.local/share/containers/podman/machine/podman-machine-default/podman.sock'</code></pre>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
