fix acc server container restarting
This commit is contained in:
@@ -12,8 +12,8 @@ services:
|
||||
PLATFORM: docker
|
||||
DB_NAME: /data/db/acc.db
|
||||
STEAMCMD_LINUX_PATH: /usr/games/steamcmd
|
||||
PORT_POOL_MIN: "9600"
|
||||
PORT_POOL_MAX: "9700"
|
||||
PORT_POOL_MIN: "9601"
|
||||
PORT_POOL_MAX: "9699"
|
||||
ACC_IMAGE: acc-wine:latest
|
||||
ACC_SERVERS_PATH: /data/servers
|
||||
ACC_SERVERS_HOST_PATH: /opt/acc-servers
|
||||
|
||||
@@ -15,10 +15,9 @@ RUN dpkg --add-architecture i386 && \
|
||||
&& \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create a non-root user for running the server.
|
||||
RUN useradd -ms /bin/bash accserver
|
||||
RUN mkdir -p /tmp/.X11-unix && chmod 1777 /tmp/.X11-unix
|
||||
|
||||
WORKDIR /home/accserver
|
||||
WORKDIR /root
|
||||
|
||||
# Copy entrypoint script.
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
@@ -30,10 +29,8 @@ VOLUME ["/acc/game"]
|
||||
# Default server port — overridden at runtime via SERVER_PORT env var.
|
||||
ENV SERVER_PORT=9600
|
||||
ENV WINEDEBUG=-all
|
||||
ENV DISPLAY=:99
|
||||
|
||||
EXPOSE ${SERVER_PORT}/tcp
|
||||
EXPOSE ${SERVER_PORT}/udp
|
||||
|
||||
USER accserver
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
Xvfb :99 -screen 0 1024x768x16 &
|
||||
# Use a display number derived from the server port to avoid conflicts
|
||||
# between containers (each server gets its own unique display).
|
||||
DISPLAY_NUM=$((SERVER_PORT % 1000 + 100))
|
||||
export DISPLAY=:${DISPLAY_NUM}
|
||||
|
||||
# Clean up any stale X lock from a previous container run.
|
||||
rm -f /tmp/.X${DISPLAY_NUM}-lock /tmp/.X11-unix/X${DISPLAY_NUM} 2>/dev/null || true
|
||||
|
||||
Xvfb ${DISPLAY} -screen 0 1024x768x16 -nolisten tcp &
|
||||
XVFB_PID=$!
|
||||
|
||||
cleanup() {
|
||||
@@ -10,7 +18,9 @@ cleanup() {
|
||||
}
|
||||
trap cleanup SIGTERM SIGINT
|
||||
|
||||
mkdir -p /acc/game/log
|
||||
|
||||
echo "Starting ACC server on port ${SERVER_PORT}..."
|
||||
|
||||
exec wine /acc/game/accServer.exe \
|
||||
-port "${SERVER_PORT}"
|
||||
cd /acc/game
|
||||
exec wine /acc/game/accServer.exe
|
||||
|
||||
@@ -33,23 +33,25 @@ func NewDockerRuntime(client *dockerclient.Client, repo *repository.ServerReposi
|
||||
|
||||
func (r *DockerRuntime) Create(ctx context.Context, server *model.Server) error {
|
||||
image := env.GetACCImage()
|
||||
portStr := strconv.Itoa(server.Port)
|
||||
natPort, err := nat.NewPort("tcp", portStr)
|
||||
tcpPortStr := strconv.Itoa(server.Port)
|
||||
udpPortStr := strconv.Itoa(server.Port - 1)
|
||||
|
||||
natTCP, err := nat.NewPort("tcp", tcpPortStr)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid port %d: %v", server.Port, err)
|
||||
return fmt.Errorf("invalid tcp port %d: %v", server.Port, err)
|
||||
}
|
||||
natPortUDP, err := nat.NewPort("udp", portStr)
|
||||
natUDP, err := nat.NewPort("udp", udpPortStr)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid udp port %d: %v", server.Port, err)
|
||||
return fmt.Errorf("invalid udp port %d: %v", server.Port-1, err)
|
||||
}
|
||||
|
||||
portBindings := nat.PortMap{
|
||||
natPort: []nat.PortBinding{{HostPort: portStr}},
|
||||
natPortUDP: []nat.PortBinding{{HostPort: portStr}},
|
||||
natTCP: []nat.PortBinding{{HostPort: tcpPortStr}},
|
||||
natUDP: []nat.PortBinding{{HostPort: udpPortStr}},
|
||||
}
|
||||
exposedPorts := nat.PortSet{
|
||||
natPort: struct{}{},
|
||||
natPortUDP: struct{}{},
|
||||
natTCP: struct{}{},
|
||||
natUDP: struct{}{},
|
||||
}
|
||||
|
||||
containerBase := env.GetACCServersPath()
|
||||
|
||||
Reference in New Issue
Block a user