MagicDraw in Docker: Difference between revisions
Jump to navigation
Jump to search
(→build) |
|||
| Line 56: | Line 56: | ||
# WF 2019-04-03 | # WF 2019-04-03 | ||
docker build . -t bitplan/javagui:latest | docker build . -t bitplan/javagui:latest | ||
</source> | |||
== run == | |||
<source lang='bash'> | |||
#!/bin/bash | |||
# WF 2019-04-03 | |||
echo "DISPLAY=$DISPLAY" | |||
# use socat for port 6000 | |||
port6000() { | |||
echo "checking port 6000" | |||
lsof -i TCP:6000 | |||
if [ $? -ne 0 ] | |||
then | |||
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"& | |||
fi | |||
} | |||
docker stop javagui | |||
docker rm javagui | |||
os=$(uname -a) | |||
case $os in | |||
Linux*) | |||
dockerdisplay=$DISPLAY | |||
n="--net=host" | |||
v="-v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority:rw";; | |||
Darwin*) | |||
port6000 | |||
dockerdisplay=docker.for.mac.host.internal:0 | |||
v="" | |||
n="";; | |||
esac | |||
docker run --name javagui -e DISPLAY=$dockerdisplay $n $v bitplan/javagui:latest | |||
#docker exec -it javagui /bin/bash | |||
</source> | </source> | ||
Revision as of 17:06, 3 April 2019
How to run MagicDraw in Docker container
see also https://community.nomagic.com/running-magicdraw-in-a-docker-container-t5895.html
The goal is to get an older MagicDraw 16.9 working in a container.
Prerequisites
You need to be able to run a Java 6 Swing GUI in a container. To get the GUI environment working might be tricky e.g. on MacOS see https://stackoverflow.com/questions/37826094/xt-error-cant-open-display-if-using-default-display
Dockerfile
FROM java:6
MAINTAINER Wolfgang Fahl (https://www.bitplan.com)
LABEL Description="Java GUI"
COPY src /home/root/java/src
WORKDIR /home/root/java
RUN mkdir bin
RUN javac -d bin src/Gui.java
WORKDIR /home/root/java/
ENTRYPOINT ["java", "-cp","bin","Gui"]
Gui.java
to be put in the src folder
import javax.swing.*;
import java.awt.event.*;
/**
*
*/
public class Gui {
public static class MyAction implements ActionListener {
public void actionPerformed(ActionEvent ae){
JOptionPane.showMessageDialog(null, "Thanks.", "GUI Test", 1);
}
}
public static void main(String args[]){
JFrame frame = new JFrame("GUI Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
JButton button1 = new JButton("Click me");
frame.getContentPane().add(button1);
button1.addActionListener(new MyAction());
frame.setVisible(true);
}
}
build
#!/bin/bash
# WF 2019-04-03
docker build . -t bitplan/javagui:latest
run
#!/bin/bash
# WF 2019-04-03
echo "DISPLAY=$DISPLAY"
# use socat for port 6000
port6000() {
echo "checking port 6000"
lsof -i TCP:6000
if [ $? -ne 0 ]
then
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"&
fi
}
docker stop javagui
docker rm javagui
os=$(uname -a)
case $os in
Linux*)
dockerdisplay=$DISPLAY
n="--net=host"
v="-v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority:rw";;
Darwin*)
port6000
dockerdisplay=docker.for.mac.host.internal:0
v=""
n="";;
esac
docker run --name javagui -e DISPLAY=$dockerdisplay $n $v bitplan/javagui:latest
#docker exec -it javagui /bin/bash