Difference between revisions of "MagicDraw in Docker"
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 18: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